目录
数组的地址解析
int[][] b=new int[][] {{1,2,3},{2,3,4},{5,6,9}};
System.out.print(b[0]); //[I@5ae9a829 [ 表示存有一维数组 I表示储存的是int类型的 @后面的16进制的数表示地址值。。
System.out.print(b); //[[I@6d8a00e3 [[表示存有一维数组 I表示储存的是int类型的 @后面的16进制的数表示地址值。
数组元素的查找(线性查找-逐个寻找)
String[] arr1=new String[] {"aa","ss","dd","ff","gg"};
String a="ss";
boolean isflag=true;
for(int i=0;i<arr1.length;i++) {
if(arr1[i].equals(a)) {
isflag=false;
System.out.println("找到了,在第"+i+"个位置");
break;
}
}
if(isflag) {
System.out.println("没找到");
}
数组中二分法算法(只能对于有序的数组)
int[] arr1=new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,78};
int chazhao=78; //需查找的数
int start=0; //初始索引值
int end=arr1.length-1; //末尾索引值
boolean isflag=true; //标识符,用来判断是否找到所要找的值
while(start<=end) { //当每一次的初始索引值小于等于末尾索引值时才能继续查找。
int middle=(start+end)/2; //二分查找从中间位置查找,相类似的有3分查找等等
if(chazhao==arr1[middle]) { //找到了
System.out.println("找到了,位置为"+middle);
isflag=false;
break;
}
else if(chazhao>arr1[middle]) { //要找的数大于中间的数,故改变初始索引值为中间值+1
start=middle+1;
}
else { //要找的数小于中间的数,故改变末尾索引值为中间值-1
end=middle-1;
}
} //重复while循环,知道找到了,或初始索引值>末尾索引值
if(isflag) {
System.out.println("没找到");
}
数组排序算法之冒泡排序
数组中排序算法之冒泡排序: 依次比较相邻的元素,最后的元素将是最大的数,每轮过后,需比较的元素越来越少
int[] arr1=new int[] {4,5,1,2,99,6,55,41,23,56,897,45,123};
for(int i=0;i<arr1.length;i++) { //i表示要排序的轮数。
for(int j=0;j<arr1.length-1-i;j++) { //-1保证能比较到arr1数组的最后一个元素。 -i表示过了i轮后找到了i个最大值,且不需要再比较。
if(arr1[j]>arr1[j+1]) {
int temp;
temp=arr1[j];
arr1[j]=arr1[j+1];
arr1[j+1]=temp;
}
}
}
for(int q:arr1) {
System.out.print(q+"\t");
}
数组中常见异常
1> 数组角标越界的异常: ArrayIndexOutofBoundsException
int[] a=new int[] {1,2,5,6,8,9,7,45,60};
for(int i=0;i<=a.length;i++) {
System.out.println(a[i]);
}
2> 空指针异常: NullPointerException
//情况一
int[] a=new int[5];
a=null;
System.out.println(a[1]);
//情况二
int[][] a=new int[5][];
System.out.println(a[1][0]);
//情况三
String[][] a=new String[][] {{"aa"},{"bb"}};
a[0]=null;
System.out.println(a[1].toString());// [Ljava.lang.String;@5ae9a829
System.out.println(a[0].toString());// java.lang.NullPointerException: