Day04—循环+数组

1 方法的重载

1.1 概念

1.2 练习1:数字求和

2 break和continue

2.1 形式

2.2 练习1:找数字88

3 循环结构2:while

3.1 格式

3.2 练习1:猜数字

4 循环结构3:do-while

4.1 格式

4.2 练习1:猜数字

5 数组

5.1 概念

5.2 创建数组

5.3 练习1:数组中存入hello

5.4 数组的长度

5.5 数组的遍历

5.5.1 形式

5.5.2 练习1:输出每个月的天数

5.5.3 练习2:遍历数组,存入1到10

5.5.4 练习3:创建随机数组

6 [了解]二维数组

6.1 概念

6.2 创建二维数组

6.3 遍历二位数组

7 拓展:

7.1 三种循环的区别

7.2… 冒泡排序

Day04—循环+数组
1 方法的重载
1.1 概念
方法重载是指在一个类中定义多个同名的方法,

但要求每个方法具有不同的参数列表(也就是说参数的个数和类型不同)。

程序调用方法时,可以通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法。

作用:提高程序的灵活性

1.2 练习1:数字求和
创建day04工程

创建cn.tedu.overload包

创建Test1_Overload.java

package cn.tedu.overload;

//这个类用来测试方法重载overload

public class Test1_Overload {

public static void main(String[] args) {

  

   int a = 10;

   int b = 20;

   int c = 30;

   String d ="40";

   //重载要求:方法名相同+参数列表不同

   add(a,b);//求ab的和,a和b叫实参

   add(a,b,c);//求 abc的和

   add(a,b,c,d);//求 abcd的和

   add(a,d);//求ad的和

}



//创建add(a,d)

//修饰符 返回值  方法名(参数列表){}

public static void add(int x,String m) {

   //+字符串拼接

   System.out.println(x+m);//1040

}



//创建add(a,b,c,d)

//修饰符 返回值  方法名(参数列表){}

public static void add(int x,int y,int z,String m) {

   //+数字之间求和,字符串拼接

   System.out.println(x+y+z+m);//6040

}



//创建add(a,b,c)

//修饰符 返回值  方法名(参数列表){}

public static void add(int x,int y,int z) {

   System.out.println(x+y+z);

}



//创建add(a,b)

//修饰符 返回值  方法名(参数列表){}

public static void add(int x,int y) {//x和y叫形参,用来接收传递过来的参数

   System.out.println(x+y);//30

}

}

2 break和continue
2.1 形式
break: 中断当前循环,简单粗暴

continue:跳出本次循环,进入下一轮

2.2 练习1:找数字88
接收用户输入的100次数字,

如果不是88继续输入

找到88就结束程序

package cn.tedu.beak;

import java.util.Scanner;

//这个类用来测试break和continue的区别

public class Test2_Break {

   public static void main(String[] args) {

       //1、接收用户输入的100次数字

       for(int i = 1 ; i <= 100 ; i++) {//执行100次

          int input = new Scanner(System.in).nextInt();

         

          //2、每个值判断是不是88

          if( input  != 88 ) {//不是88

              continue;//结束当前,还可以继续输入

          }else if( input  == 88) {//是88

              System.out.println("中了");

              break;//结束,break continue之后是不可到达的代码

          }

       }

      

   }

}

3 循环结构2:while
先判断,再执行

3.1 格式
while(循环条件){

   循环体代码…

}

3.2 练习1:猜数字
产生一个随机数,

和用户一直在输入的数字

比较并提醒大了小了和中了。

package cn.tedu.whiledowhile;

import java.util.Random;

import java.util.Scanner;

//这个类用来测试while

public class Test3_While {

   //猜数字游戏

   public static void main(String[] args) {

          //1、让程序产生随机数

          //nextInt(n) -- 产生n以内的随机数,从0开始

          int random = new Random().nextInt(100)+1;

          System.out.println(random);

         

          //2、让用户一直输入

// for(int i = 1 ; i >=0 ; i++)//同样也是死循环

          while(true) {//死循环,会一直执行循环体代码

                 //3、每次输入的值

                 int input = new Scanner(System.in).nextInt();

                

                 //4、比较并给出提示大了小了和中了

                 if(input > random ) {

                        System.out.println("大了");

                 }else if(input < random ) {

                        System.out.println("小了");

                 }else if(input == random ) {

                        System.out.println("中了");

                        break;//break结束循环,设置程序的出口!!

                 }

          }

         

   }

}

4 循环结构3:do-while
先执行,再判断

4.1 格式
do{

   代码…

} while(执行条件);

4.2 练习1:猜数字
产生一个随机数,和用户一直在输入的数字比较。

package cn.tedu.whiledowhile;

import java.util.Random;

import java.util.Scanner;

//这个类用来测试while

public class Test3_While {

// 猜数字游戏

public static void main(String[] args) {

// method();// 使用while循环猜数字

   method2();// 使用do...while循环猜数字

}



// 使用do...while循环猜数字

public static void method2() {

   // 1、让程序产生随机数

   // nextInt(n) -- 产生n以内的随机数,从0开始

   int random = new Random().nextInt(100) + 1;

   System.out.println(random);// 输出随机数



   // 2、让用户一直输入

   // for(int i = 1 ; i >=0 ; i++)//同样也是死循环

   // 死循环,会一直执行循环体代码

   do{

       // 3、每次输入的值

       int input = new Scanner(System.in).nextInt();



       // 4、比较并给出提示大了小了和中了

       if (input > random) {

          System.out.println("大了");

       } else if (input < random) {

          System.out.println("小了");

       } else if (input == random) {

          System.out.println("中了");

          break;// break结束循环,设置程序的出口!!

       }

    }while (true) ;

}



// 使用while循环猜数字

public static void method() {

   // 1、让程序产生随机数

   // nextInt(n) -- 产生n以内的随机数,从0开始

   int random = new Random().nextInt(100) + 1;

   System.out.println(random);// 输出随机数



   // 2、让用户一直输入

   // for(int i = 1 ; i >=0 ; i++)//同样也是死循环

   while (true) // 死循环,会一直执行循环体代码

   {

       // 3、每次输入的值

       int input = new Scanner(System.in).nextInt();



       // 4、比较并给出提示大了小了和中了

       if (input > random) {

          System.out.println("大了");

       } else if (input < random) {

          System.out.println("小了");

       } else if (input == random) {

          System.out.println("中了");

          break;// break结束循环,设置程序的出口!!

       }

   }



}

}

5 数组
5.1 概念
数组Array,标志是[ ]。

是用于储存多个相同类型数据的集合。

想要获取数组中的元素值,

可以通过脚标(下标)来获取,下标是从0开始的。

5.2 创建数组

一般分为动态初始化和静态初始化

动态初始化:

int[] a = new int[5];

静态初始化:

int[] b = new int[]{1,2,3,4,5};

int[] c = {1,2,3,4,5};

5.3 练习1:数组中存入hello
package cn.tedu.array;

//这个类用来测试数组

public class Test4_Array {

   public static void main(String[] args) {

          //1、创建数组:数组里的元素都是同一种类型

          //静态方式:知道数组里的元素

          char[] c = new char[] {'h','e','l','l','o'};

          char[] c2 =  {'h','e','l','l','o'};

         

          //动态方式:不确定数组的元素

          char[] c3 = new char[5];//开辟空间存5个元素

          c3[0] = 'h' ;//把第一个元素的默认值修改为h字符

          c3[1] = 'e' ;

          c3[2] = 'l' ;

          c3[3] = 'l' ;

          c3[4] = 'o' ;

//因为不存在下标为5的元素,数组下标越界异常 java.lang.ArrayIndexOutOfBoundsException:5

// c3[5] = ‘?’ ;//访问下标为5的元素。根本就没有

          System.out.println(c);

          System.out.println(c2);

          System.out.println(c3);

   }

}

5.4 数组的长度
Ø length属性

Ø 数组一旦创建,长度不可变

Ø 允许0长度的数组

5.5 数组的遍历
从头到尾,依次访问数组的位置。

5.5.1 形式
for(下标的开始位置;数组的长度-1;下标++){

根据下标获取元素

}

5.5.2 练习1:输出每个月的天数
package cn.tedu.array;

//这个类用来测试数组的练习

public class Test5_Array2 {

public static void main(String[] args) {

   method();//输出每个月的天数

}



//输出每个月的天数

public static void method() {

   //1、创建静态数组存放天数

   int[] days = {31,29,31,30,31,30,31,31,30,31,30,31};

  

   //2、遍历数组获取每个元素

   //int i = 0  i指从下标为0的第一元素开始向后遍历

   // days.length-1 指下标的最大值是数组的长度-1

   //i++ 下标的值是一个递增的过程 01234567891011

   for( int i = 0 ; i <= days.length-1 ; i++ ) {

// System.out.println(“1月有31天”);

       //i只是下标,days[i]是根据下标获取每个对应的值

       System.out.println( (i+1)+"月有"+days[i]+"天");

   }

  

}

}

5.5.3 练习2:遍历数组,存入1到10
//遍历数组,存入1到10

   public static void method2() {

          //1、创建动态数组

          int a[] = new int[10];

         

          //2、根据下标遍历数组

          for( int i = 0 ; i <= a.length-1 ; i++ ) {

                  a[i] = i+1 ;//a[i]是根据下标i获取到元素。并且重新赋值

          }

         

          System.out.println(a);//默认打印的是数组的内存地址[I@15db9742

//Arrays是数组的工具类,可以把数组里的元素值打印出来,如:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

          System.out.println(Arrays.toString(a));

   }

5.5.4 练习3:创建随机数组
获取100以内的随机值的数组

//创建数组并存入随机值

public static void method3() {

   //1、创建动态数组

   int a[] = new int[5];

  

   //2、遍历数组

   for( int i = 0 ; i <= a.length-1 ; i++ ) {

       //根据下标获取每个元素

       a[i] = new Random().nextInt(100) ;

   }

  

   System.out.println(a);//[I@7852e922

   //[29, 34, 11, 36, 31]

   System.out.println(Arrays.toString(a));

}

6 [了解]二维数组
6.1 概念
存放数组的数组,也就是说数组里存的还是数组的数据形式。

6.2 创建二维数组
1、静态初始化

int[][] c= {{1,2},{3,4},{5,6},{8,9}};

–创建外部数组长度是4

–创建内部数组长度分别是2

–初始化数组,存入默认值

–修改数组中的默认值

–分配唯一的内存地址值,并交给引用型变量a保存

6.3 遍历二位数组
for(int i=0;i<a.length;i++){//遍历外部数组

   for(int j=0;j<a[i].length;j++){//遍历内部数组

          syso(a[i][j]);//根据外围数组下标和内部数组下标结合定位元素

a[i][j]= ? ;

}

}

7 拓展:
7.1 三种循环的区别
while用来先做判断后执行业务

while(循环条件){

循环体

}

do…while用来先执行后判断的业务,能够保证循环体最少执行1次

do{

循环体

}while(循环条件);

for适用于知道从哪儿开始,确定循环次数

for(开始条件;判断条件;更改条件){

循环体

}

三种循环都可以互相代替

1、 for:知道循环次数

2、 while/do while:当循环次数不确定时

3、 while:先判断,不符合规则,不执行代码

4、 do while:代码最少被执行一次,再去判断,符合规则,再次执行代码

7.2 冒泡排序
package day005;

import java.util.Arrays;

import java.util.Random;

public class Test1_冒泡 {

   public static void main(String[] args) {

          int[] arr = suiji();//获得随机数组

          System.out.println(Arrays.toString(arr));

         

          sort(arr);//冒泡

          System.out.println(Arrays.toString(arr));

         

   }



   //获得随机数组

   private static int[] suiji() {

          int n = 5+new Random().nextInt(6);

          int[] arr = new int[n];

          for (int i = 0; i < arr.length; i++) {

                 arr[i]=new Random().nextInt(100);

          }

          return arr;

   }

  

   //冒泡,从小到大排序

   private static void sort(int[] a) {

          for(int i=0;i<a.length;i++){

                 for(int j=a.length-1;j>i;j--){

                        if(a[j]<a[j-1]){

                               int t=a[j];

                               a[j]=a[j-1];

                               a[j-1]=t;

                        }

                 }

          }

         

   }

}