public class ArrayTest2 { public static void main(String[] args) { String[] arr = new String[]{"JJ", "DD", "MM", "BB", "GG", "AA"}; //数组的复制(区别于数组变量的赋值:arr1=arr) String[] arr1 = new String[arr.length]; for (int i = 0; i < arr.length; i++) { arr1[i] = arr[i]; } for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i] + "\t"); } System.out.println(); //数组的反转 // for(int i=0;i<arr.length/2;i++)//方式一 // { // String temp=arr[i]; // arr[i]=arr[arr.length-i-1]; // arr[arr.length-i-1]=temp; // } // for(int i=0,j=arr.length-1;i<j;i++,j--)//方式二(i<j就可以,就算数组是奇数也可以不用i=j) // { // String temp=arr[i]; // arr[i]=arr[j]; // arr[j]=temp; // } //遍历 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); //查找(或搜索) //线性查找:从前往后一个一个找 String dest = "BB";//要找的东西 boolean isFlag = true; for (int i = 0; i < arr.length; i++) { if (dest.equals(arr[i])) {//注意字符的判断是否相等要用equals() System.out.println("找到了指定的元素:位置为" + i); isFlag = false; break; } } if (isFlag == true) { System.out.println("很遗憾,没有找到");//有个问题就是,就算找到了,按这个也会输出没找到。 } //二分法查找 //前提:所要查找的数组必须有序。(升序降序都可以) int[]arr2=new int[]{-98,-34,2,34,54,66,79,105,210,333}; int dest1=-34;//要找的东西 int head=0;//初始的首索引 int end=arr2.length-1;//初始的末索引 boolean isFlag1=true; while(head<=end) { int middle=(head+end)/2;//如果除不尽,那就截断取左边的数字。 System.out.println("a"+middle); if(dest1==arr2[middle])//如果要找的数就是中间这个数就输出 { System.out.println("找到了指定的元素:位置为" + middle); isFlag1=false; break; } else if(arr2[middle]>dest1) { end=middle-1;//如果这个数在中间值的左边,则去掉右边的部分。 } else{ head=middle+1;//如果这个数在中间值的右边,则去掉左边的部分。 } } if(isFlag1==true) System.out.println("很遗憾,没有找到"); } }
数组的复制、反转、线性查找、二分法查找
于 2022-07-29 16:09:40 首次发布