public class ArrayDemo1 {
    	public static void main(String[] args) {
        //格式:
        //静态初始化
        //完整格式:
        //数据类型 [] 数组名 = new 数据类型[]{元素1,元素2....};
        //简化格式:
        //数据类型 [] 数组名 = {元素1,元素2....};


        //需求1:定义数组存储5个学生的年龄
       int[] arr1 = new int[]{11,12,13,14,15};
        System.out.println(arr1);//[I@776ec8df
         /*int[] arr2 = {11,12,13,14,15};

        //需求2:定义数组存储3个学生的姓名
        String[] arr3 = new String[]{"zhangsan","lisi","wangwu"};
        String[] arr4 = {"zhangsan","lisi","wangwu"};

        //需求3:定义数组存储4个学生的身高 1.93
        double[] arr5 = new double[]{1.93,1.75,1.73,1.81};*/
        //double[] arr6 = {1.93,1.75,1.73,1.81};
        //System.out.println(arr6);//[D@776ec8df  地址值

        //扩展:
        //解释一下地址值的格式含义  [D@776ec8df
        //[ :表示当前是一个数组
        //D:表示当前数组里面的元素都是double类型的
        //@:表示一个间隔符号。(固定格式)
        //776ec8df:才是数组真正的地址值,(十六进制)
        //平时我们习惯性的会把这个整体叫做数组的地址值。
    	}
		}
		
        
            
		public class ArrayDemo2 {
    	public static void main(String[] args) {
        //利用索引对数组中的元素进行访问
        //1.获取数组里面的元素
        //  格式: 数组名[索引]


        int[] arr = {1,2,3,4,5};
        //获取数组中的第一个元素
        //其实就是0索引上对应的元素
        // int number = arr[0];
        // System.out.println(number);//1
        //获取数组中1索引上对应的数据,并直接打印出来
        // System.out.println(arr[1]);//2


        //2.把数据存储到数组当中
        //格式:  数组名[索引] = 具体数据/变量;
        //细节:一旦覆盖之后,原来的数据就不存在了。
        arr[0] = 100;

        System.out.println(arr[0]);//100
    	}
		}
		
        
            
		public class ArrayDemo3 {
    	public static void main(String[] args) {
        //1.定义数组
        int[] arr = {1,2,3,4,5};
        //2.获取数组里面所有的元素
        //格式: 数组名[索引]
        /*System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr[3]);
        System.out.println(arr[4]);*/

        //利用循环改进代码
        //开始条件:0
        //结束条件:数组的长度 - 1(最大索引)
        /* for (int i = 0; i < 5; i++) {
            //i: 0 1 2 3 4
            System.out.println(arr[i]);
        }*/

        //在Java当中,关于数组的一个长度属性,length
        //调用方式:数组名.length
        //System.out.println(arr.length);
        for (int i = 0; i < arr.length; i++) {
            //i: 0 1 2 3 4
            System.out.println(arr[i]);
        }

        //扩展:
        //自动的快速生成数组的遍历方式
        //idea提供的
        //数组名.fori
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    	}
		}
		
        
            
		public class ArrayDemo4 {
    	public static void main(String[] args) {
        /* 定义一个数组,用来存班级中50个学生的姓名
        姓名未知,等学生报道之后,再进行添加。*/


        //格式:
        //数据类型[] 数组名 = new 数据类型[数组的长度];
        //在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值

        String[] arr = new String[50];
        //添加学生
        arr[0] = "zhangsan";
        arr[1] = "lisi";
        //获取
        System.out.println(arr[0]);//zhangsan
        System.out.println(arr[1]);//lisi
        System.out.println(arr[2]);//打印出来的是默认初始化值null

        //数组默认初始化值的规律
        //整数类型:默认初始化值0
        //小数类型:默认初始化值0.0
        //字符类型:默认初始化值'\u0000' 空格
        //布尔类型:默认初始化值 false
        //引用数据类型:默认初始化值 null
        int[] arr2 = new int[3];
        System.out.println(arr2[0]);//0
        System.out.println(arr2[1]);//0
        System.out.println(arr2[2]);//0
    	}
		}
		
        
            
		public class ArrayDemo5 {
    	public static void main(String[] args) {
        //1.定义一个数组
        int[] arr = {1,2,3,4,5};
        //长度:5
        //最小索引:0
        //最大索引:4(数组的长度 - 1)
        System.out.println(arr[2]);


        //小结:
        //索引越界异常
        //原因:访问了不存在的索引
        //避免:索引的范围
        //最小索引:0
        //最大索引:(数组的长度 - 1)
    	}
		}
		
        
            
		public class InfiniteloopDemo1 {
    	public static void main(String[] args) {
        //for格式的无限循环
        /*for(;;){
            System.out.println("学习");
        }*/

        //while格式的无限循环
        /*while(true){
            System.out.println("学习");
        }*/

        //注意事项
        //无限循环的下面不能再写其他代码了,因为循环永远停不下来,那么下面的代码永远执行不到
        while(true){
            System.out.println("给女神表白");
        }
        //System.out.println("女神答应我了");
    	}
		}
		
        
            
		public class SkipLoppDemo1 {
    	public static void main(String[] args) {
        //1.跳过某一次循环
        for (int i = 1; i <= 5; i++) {
            if(i == 3){
                //结束本次循环,继续下次循环。
                continue;
            }
            System.out.println("小老虎在吃第" + i + "个包子");
        }

    	}
		}
		
        
            
		public class SkipLoppDemo2 {
    	public static void main(String[] args) {
        //2.结束整个循环
        for (int i = 1; i <= 5; i++) {
            System.out.println("小老虎在吃第" + i + "个包子");
            if(i == 3){
                //结束整个循环
                break;
            }
        }
    	}
		}
		
        
            
		public class ArrTest1 {
    	public static void main(String[] args) {
        /*定义一个数组,存储1,2,3,4,5
        遍历数组得到每一个元素,求数组里面所有的数据和*/


        //分析:
        //1.定义一个数组,并添加数据1,2,3,4,5
        int[] arr = {1,2,3,4,5};

        //求和变量
        int sum = 0;
        //2.遍历数组得到每一个数据,累加求和
        for (int i = 0; i < arr.length; i++) {
            //i 依次表示数组里面的每一个索引
            //arr[i] 依次表示数组里面的每一个元素
            sum = sum + arr[i];
        }

        //当循环结束之后,sum的值就是累加之后的结果
        System.out.println(sum);
    	}
		}
		
        
            
		public class ArrTest2 {
    	public static void main(String[] args) {
        /*定义一个数组,存储1,2,3,4,5,6,7,8,9,10
        遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字*/


        //分析:
        //1.定义一个数组 存储1,2,3,4,5,6,7,8,9,10
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        //定义一个变量,用来统计次数
        int count = 0;
        //2.遍历数组得到每一个元素
        for (int i = 0; i < arr.length; i++) {
            //i 表示数组里面的每一个索引
            //arr[i] 表示数组里面的每一个元素
            //3.判断当前的元素是否为3的倍数,如果是那么统计变量就需要自增一次。
            if(arr[i] % 3 == 0){
               // System.out.println(arr[i]);
                count++;
            }
        }
        //当循环结束之后,就表示数组里面所有的数字都判断完毕了,直接打印count即可
        System.out.println("数组中能被3整除的数字有" + count + "个");

    	}
		}
		
        
            
		public class ArrTest3 {
    	public static void main(String[] args) {
       /* 定义一个数组,存储1,2,3,4,5,6,7,8,9,10
        遍历数组得到每一个元素。
        要求:
        1,如果是奇数,则将当前数字扩大两倍
        2,如果是偶数,则将当前数字变成二分之一*/


        //分析:
        //1.定义一个数组,存1,2,3,4,5,6,7,8,9,10
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        //2.遍历数组得到每一个元素
        for (int i = 0; i < arr.length; i++) {
            //i 依次表示数组里面的每一个索引
            //arr[i] 依次表示数组里面的每一个元素
            //3.对每一个元素进行判断
            if(arr[i] % 2 == 0){
                //偶数 变成二分之一
               arr[i] = arr[i] / 2;
            }else{
                //奇数 扩大两倍
                arr[i] = arr[i] * 2;
            }
        }

        //遍历数组
        //一个循环尽量只做一件事情。
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    	}
		}
		
        
            
		public class ArrTest4 {
    	public static void main(String[] args) {
        //定义数组求最大值:33,5,22,44,55

        //扩展问题:
        //1.根据求最大值的思路,自己改写一下求最小智
        //2.为什么max要记录为arr[0],默认值不能为0吗?
        //不能写0
        //max的初始化值一定要是数组中的值。
        //3.循环中开始条件一定是0吗?
        //循环的开始条件如果为0,那么第一次循环的时候是自己跟自己比了一下,对结果没有任何影响,但是效率偏低
        //为了提高效率,减少一次循环的次数,循环开始条件可以写1.


        //1.定义数组用来存储5个值
        int[] arr = {33,5,22,44,55};
        //2.定义一个变量max用来存储最大值
        //临时认为0索引的数据是最大的
        int max = arr[0];
        //3.循环获取数组中的每一个元素
        //拿着每一个元素跟max进行比较
        for (int i = 1; i < arr.length; i++) {
            //i 索引  arr[i] 元素
            if(arr[i] > max){
                max = arr[i];
            }
        }
        //4.当循环结束之后,max记录的就是数组中的最大值
        System.out.println(max);//55
    	}
		}
		
        
            
		import java.util.Random;

		public class ArrTest5 {
    	public static void main(String[] args) {
        /*需求:生成10个1~100之间的随机数存入数组。
        1)求出所有数据的和
        2)求所有数据的平均数
        3)统计有多少个数据比平均值小*/

        //分析:
        //1.定义数组
        int[] arr = new int[10];
        //2.把随机数存入到数组当中
        Random r = new Random();

        for (int i = 0; i < arr.length; i++) {
            //每循环一次,就会生成一个新的随机数
            int number = r.nextInt(100) + 1;
            //把生成的随机数添加的数组当中
            //数组名[索引] = 数据;
            arr[i] = number;
        }


        // 1)求出所有数据的和
        //定义求和变量
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            //循环得到每一个元素
            //并把元素累加到sum当中
            sum = sum + arr[i];
        }
        System.out.println("数组中所有数据的和为:" + sum);


        //2)求所有数据的平均数
        int avg = sum / arr.length;
        System.out.println("数组中平均数为:" + avg);



        //3)统计有多少个数据比平均值小
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] < avg){
                count++;
            }
        }

        //当循环结束之后,就表示我已经找到了所有的比平均数小的数据
        System.out.println("在数组中,一共有" + count + "个数据,比平均数小");



        //遍历数组,验证答案
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    	}
		}
		
        
            
		public class ArrTest6 {
    	public static void main(String[] args) {
        /*需求:定义两个变量,交换两个变量记录的值*/

        int a = 10;
        int b = 20;

        /*  //把变量b的值。赋值给了变量a。那么变量a原来的值就被覆盖了
        a = b;//a = 20 b = 20

        //把变量a的值,赋值给了变量b。
        b = a;//a = 20 b = 20

        System.out.println(a);//20
        System.out.println(b);//20*/

        //定义一个临时的第三方变量
        //把变量a的值,赋值给了temp
        int temp = a;
        //把变量b的值,赋值给了a。那么变量a原来记录的值就被覆盖了
        a = b;
        //就是把变量a原来的值,赋值给了变量b
        b = temp;
        System.out.println(a);//20
        System.out.println(b);//10
    	}
		}
		
        
            
		public class ArrTest7 {
    	public static void main(String[] args) {
        /*需求:定义一个数组,将数组中0索引和最大索引出的值进行交换*/

        //1.定义一个数组
        int[] arr = {1,2,3,4,5};
        //2.将数组中0索引和最大索引出的值进行交换
        //也是可以利用第三方变量进行交换
        int temp = arr[0];
        arr[0] = arr[4];
        arr[4] = temp;

        //3.遍历数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    	}
		}
		
        
            
		public class ArrTest8 {
    	public static void main(String[] args) {
        /*需求:定义一个数组,存入1,2,3,4,5。交换首尾索引对应的元素。
            交换前:1,2,3,4,5
            交换后:5,2,3,4,1*/


        //1.定义数组存储数据
        int[] arr = {1,2,3,4,5};
        //2.利用循环去交换数据
        for(int i = 0,j = arr.length - 1; i < j; i++,j--){
            //交换变量i和变量j指向的元素
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //当循环结束之后,那么数组中的数据就实现了头尾交换
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    	}
		}
		
        
            
		import java.util.Random;

		public class ArrTest9 {
   		public static void main(String[] args) {
        //需求:定义一个数组,存入1~5。要求打乱数组中所有数据的顺序。
        //难点:
        //如何获取数组中的随机索引
        /* int[] arr = {1,2,3,4,5};
        //索引范围:0 1 2 3 4
        Random r = new Random();
        int randomIndex = r.nextInt(arr.length);
        System.out.println(randomIndex);*/


        //1.定义数组存储1~5
        int[] arr = {1, 2, 3, 4, 5};
        //2.循环遍历数组,从0索引开始打乱数据的顺序
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            //生成一个随机索引
            int randomIndex = r.nextInt(arr.length);
            //拿着随机索引指向的元素 跟 i 指向的元素进行交换
            int temp = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = temp;
        }
        //当循环结束之后,那么数组中所有的数据已经打乱顺序了
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    	}
		}
		
        
            
		
		public class LoopTest1 {
    	public static void main(String[] args) {
        /*朋友聚会的时候可能会玩一个游戏:逢7过
        游戏规则:从任意一个数字开始报数,当你要报的数字是包含7或者是7的倍数时都要说过:过
        需求:使用程序在控制台打印出1-100之间的满足逢七必过规则的数据*/

        //分析:
        //个位7  十位7   7倍数
        //1 2 3 4 5 6 过 8 9 10 11 12 13 过 15 16 过 18 19 20 过....
        //69 过 过 过 过 过 过... 80

        //1.得到1~100之间的每一个数字
        //开始:1
        //结束:100
        for (int i = 1; i <= 100; i++) {
        //2.判断每一个数字,如果符合规则,就打印过,如果不符合规则就打印真实的数字
            if(i % 10 == 7 || i / 10 % 10 == 7  ||  i % 7 == 0){
                System.out.println("过");
                continue;
            }
            System.out.println(i);
        }
    	}
		}
		
        
            
		import java.util.Scanner;

		public class LoopTest2 {
    	public static void main(String[] args) {
        /*需求:键盘录入一个大于等于2的整数 x ,计算并返回 x 的 平方根 。
        结果只保留整数部分 ,小数部分将被舍去 。*/


        //分析:
        //平方根   16的平方根4
        //         4的平方根2


        // 10
        // 1 * 1 = 1 < 10
        // 2 * 2 = 4 < 10
        // 3 * 3 = 9 < 10
        // 4 * 4 = 16 > 10
        //推断:10的平方根是在3~4之间。


        // 20
        // 1 * 1 = 1 < 20
        // 2 * 2 = 4 < 20
        // 3 * 3 = 9 < 20
        // 4 * 4 = 16 < 20
        // 5 * 5 = 25 > 20
        //推断:20的平方根是在4~5之间。


        //在代码当中
        //从1开始循环,拿着数字的平方跟原来的数字进行比较
        //如果小于的,那么继续往后判断
        //如果相等,那么当前数字就是平方根
        //如果大于的,那么前一个数字就是平方跟的整数部分


        //1.键盘录入一个整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int number = sc.nextInt();
        //2.从1开始循环判断
        //开始:1 结束: number
        for (int i = 1; i <= number; i++) {
            //用i * i 再跟number进行比较
            if(i * i == number){
                System.out.println(i + "就是" + number + "的平方根");
                //一旦找到了,循环就可以停止了,后面的数字就不需要再找了,提高代码的运行效率。
                break;
            }else if(i * i > number){
                System.out.println((i - 1) + "就是" + number + "平方根的整数部分");
                break;
            }
        }
    	}
		}
		
        
            
		import java.util.Scanner;

		public class LoopTest3 {
    	public static void main(String[] args) {
        //需求:键盘录入一个正整数 x ,判断该整数是否为一个质数。

        //质数:
        //如果一个整数只能被1和本身整除,那么这个数就是质数。否则这个数叫做合数
        //7 = 1 * 7 质数
        //8 = 1 * 8  2 * 4 合数


        //分析:
        //1.键盘录入一个正整数
        //number
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个正整数");
        int number = sc.nextInt();//9

        //定义一个变量,表示标记
        //标记着number是否为一个质数
        //true: 是一个质数
        //false : 不是一个质数

        //表示最初就认为number是一个质数
        boolean flag = true;


        //2.判断
        //写一个循环,从2开始判断,一直判断到number-1为止
        //看这个范围之内,有没有数字可以被number整除
        for (int i = 2; i < number; i++) {
            //i 依次表示这个范围之内的每一个数字
            //看number是否能被i整除就可以了
            if(number % i == 0){// 9 % 2 = 1
                flag = false;
                //System.out.println(number + "不是一个质数");
                break;
            }/*else{
                System.out.println(number + "是一个质数");
            }*/
        }

        //只有当这个循环结束了,表示这个范围之内所有的数字都判断完毕了
        //此时才能断定number是一个质数
        if(flag){
            System.out.println(number + "是一个质数");
        }else{
            System.out.println(number + "不是一个质数");
        }
    	} 
		}
		
        
            
		public class LoopTest4 {
    	public static void main(String[] args) {
        // 100000
        // 2 ~ 99999
        //循环的次数:将近10万次

        //推荐一个简化的思路
        //81
        //1 * 81
        //3 * 27
        //9 * 9


        //以81的平方根9,为中心
        //而且假设 a * b = 81
        //那么a和b中,其中有一个必定是小于等于9的。
        //另一个是大于等于9的。

        //假设,都是大于9 --- 9.1 * 9.1 > 81
        //假设,都是小于9 --- 8.9 * 8.9 < 81
        //其中一个数字一定是小于等于平方根
        //另外一个数字一定是大于等于平方根

        int number = 100;
        //如果这个范围之内,所有的数字都不能被number整除
        //那么number就一定是一个质数。
       /* for (int i = 2; i <= number的平方根; i++) {

        }*/
    	}
		}
		
        
            
		//1.导包
		import java.util.Random;

		public class LoopTest5 {
    	public static void main(String[] args) {
        //先获取一个随机数。
        //范围:0~10

        //2.创建对象
        Random r = new Random();

        //3.生成随机数
        //判断技巧:
        //在小括号中,书写的是生成随机数的范围
        //这个范围一定是从0开始的。
        //到这个数-1结束
        //口诀:包头不包尾,包左不包右
        for (int i = 0; i < 100; i++) {
            int number = r.nextInt(10);// 0 ~ 9
            System.out.println(number);
        }
    	}
		}
		
        
            
		import java.util.Random;

		public class LoopTest6 {
    	public static void main(String[] args) {
        //需求:
        //随机数范围:1~100

        //创建对象
        Random r = new Random();
        //生成随机数
        int number = r.nextInt(100) + 1;//1  ~ 100
        System.out.println(number);


        //秘诀
        //用来生成任意数到任意数之间的随机数 7 ~15
        //1.让这个范围头尾都减去一个值,让这个范围从0开始  -7   0~8
        //2.尾巴+1       8 + 1 = 9
        //3.最终的结果,再加上第一步减去的值。

       /* Random r = new Random();
        int number = r.nextInt(9) + 7;// 7 ~ 15
                //   0 ~ 8  + 7
        System.out.println(number);*/

    	}
		}
		
        
            
		import java.util.Random;
		import java.util.Scanner;

		public class LoopTest7 {
    	public static void main(String[] args) {
        //需求:程序自动生成一个1-100之间的随机数字,使用程序实现猜出这个数字是多少?
        //扩展小需求:加一个保底机制,3次猜不中,直接提示猜中了。

        //注意点:
        //1.生成随机数的代码int number = r.nextInt(100) + 1;
        //不能写在循环的里面的,否则每一次都会产生一个新的随机数

        //2.抽奖机制
        //用点券去抽水晶
        //保底 360次


        //计数器
        //用来统计当前已经猜了多少次。
        int count = 0;
        //分析
        // 1. 生成一个1-100之间的随机数字
        Random r = new Random();
        int number = r.nextInt(100) + 1;
        System.out.println(number);
        // 2. 猜这个数字是多少
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请输入你要猜的数字");
            int guessNumber = sc.nextInt();

            //3 . 判断两个数字给出不同的提示
            //猜的数字大了,提示 大了
            //猜的数字小了,提示 小了
            //猜的数字一样,提示猜中了
            count++;
            if(count == 3){
                System.out.println("猜中了");
                break;
            }
            if(guessNumber > number){
                System.out.println("大了");
            }else if(guessNumber < number){
                System.out.println("小了");
            }else{
                System.out.println("猜中了");
                break;
            }
        }
		}
		}
		
        
单词