五、控制流程
回顾
continue 结束此次循环,进行下一次。while(){if(i=5) continue;} 执行后仍然会执行i=6,i=7…会继续循环
break 只能结束循环 while(){if(i=7) break;} 执行后就不再继续执行了,不会继续循环
boolean 可以借助变量来结束
boolean b =false;
for(int i=0;;){
for(int j=0;;){
if(j=10) {b=true;break;}
}
if(b){break;}
}
还有outloop:标记
outloop:
for(){if(){break outloop;}}
控制循环的标记方式很多,但是用法还需要在测试、具体应用中实践,才能加深印象。
对于变量的探究
byte b=127;//8位(+-)
short s=1024*32-1;//16位(+-)
int i=1024*1024*1024*2-1;//32位(+-)
System.out.println(b+"\r\n"+s+"\r\n"+i);//发现byte和short类型不会溢出,会直接报错。而int类型结果溢出一位,就直接跑到符号位上去,负溢,而再进一位直接溢出为0了
六、数组
1创建数组
int[] array = new int[5];
创建数组的过程也可以与面向对象类比。运用Java内置类,来创建数组。
Hero aqua = new Hero();
int[] array = new int[5];
同样,数组的创建也可以分为声明使用类与创建对象
int[] array;
array = new int[5];
注意,数组大小定义为5,array[0]-array[4]这五个int型32B存储空间
array[0]=1;赋值操作
System.out.println(array.length);length方法输出数组长度。
Math.random()随机0-1的小数,乘100再强转可以输出随机100以内的数。需要java,lang.Math类
需要注意的是,Math类类型是private,因此无法创建Math类的对象。但Math类的方法都是类方法,可以不用创建对象直接Math.random()这样用类名调用类方法。
2初始化数组
数组有多种写法,以下是两种常用且不容易出错的方法
int[] a1 = new int[5];只定义
int[] a2 = {0,1,2,3,4};定义并赋值
在数组中,需要特别注意一点,定义时的int[] a = new int[5] 定义范围是a[0]-a[4],并且a.length=5。所以在对数组元素进行操作时,最末尾元素为a[a.length-1]。进行循环操作时更需要注意。
在创建类时,因为类无参数,导包即可,于是类的创建为public class 类名{}。
而不需要像创建方法一样 public 返回值类型 方法名(参数){}
3排序
选择排序
例子:使用选择排序进行正排序,数组大小为5
需要两个循环语句。内部循环控制单次选择,外部循环控制进行a.length-1次选择。
//选择排序
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
System.out.println("第"+(i+1)+"次选择排序:");
for(int k=0;k<a.length;k++){
System.out.print(a[k]+" ");
}
System.out.println("\r\n");
}
在单次选择中,需要进行a.length-1次比较。循环条件也可以(int j=0;j<a.length-1;j++),但内部a[j]得换成a[j+1]
在此过程中,我们只需要控制比较对调(if对调)、比较次数(两次循环)即可
4增强型for循环
foreach循环,一般拿来遍历数据使用。只能取值,不能赋值。
for(int each:array){System.out.println(each);}
5复制数组
复制数组可以使用for循环,也可以使用System.arraycopy(src,srcPos,dest,destPos,length)来复制。
(复制的数组a,a的起始位置,粘贴的数组b,b的起始位置,复制数据的长度)
先定义两个数组
int[] a ={1,2,3,4,5,6};
int[] b =new int[4];
使用方法
System.arraycopy(a,0,b,0,4);
之后遍历测试
for(int each:b){System.out.println(each);}
6二维数组
二维数组可以理解为数组的数组,有以下几种定义方式。
int[][] a = new int[2][3]; 定义了二维数组的大小
int[][] b = {{1,2,3},{4,5,6}}; 定义后还分配空间
import java.lang.Math; public class test { public static void main(String[] args) { int[][] a = new int[5][5]; int x=0,y=0,value=0; System.out.println("随机二维数组如下:"); for(int i=0;i<a.length;i++){ for(int j=0;j<a[i].length;j++){ a[i][j]=(int)(Math.random()*100); System.out.print("\t"+a[i][j]); if(a[i][j]>value){ value=a[i][j]; x=i; y=j; } } System.out.println("\r\n"); } System.out.println("最大的值为"+value+"坐标为["+x+"]["+y+"]"); } } |
foreach遍历只能用一维数组。但是如果想要遍历二维数组,就得在外部多写一个for循环。
for(int i=0;i<a.length;i++){ for(int each : a[i]){ System.out.print("\t"+each); } System.out.println("\r\n"); } |
二维数组其实就是数组的集合。
在一维数组中,a表示一维数组,a[i]是元素;
在二维数组中,a表示二维数组,a[i]是一维数组,a[i][j]是元素。