數組是在內存中存儲相同數據類型的連續的空間
聲明一個數組就是在內存空間中划出一串連續的空間
數組名代表的是連續空間的首地址
通過首地址可以依次訪問數組所有元素
元素在數組中的排序叫做下標從零開始
數組的使用
數組長度一旦聲明,不可改變不可追加
聲明一個int類型的數組
int[ ] arr; 或int arr[ ]
給數組分配空間
arr=new int[5];
給數組賦值
arr[0]=1; 0代表的是數組的第1個元素 ,元素下標為0
arr[1]=1; 1代表的是數組的第2個元素 ,元素下標為1
訪問數組數據 ,使用數組下標訪問 c=arr[4];
數組聲明縮寫
int[ ] arr={12,3,4,8,5,6,6,7,8,8,9,8}; int [ ] arr1=new int[ ]{12,3,4,8,5,6,6,4};
new int[ ]的[ ]一定不能放內存大小
使用循環給數組賦值
示例為
int[ ] arr=new int[5]; for (int i = 0; i < arr.length; i++) { System.out.println("數組第"+(i+1)+"個值為"+i); }

使用循環遍歷給數組賦值,輸出數組
實例為
int[ ] arr={1,3,6,5,6,7,84,55,5}; for (int num:arr) { System.out.println(num); }
顯示結果為

數組中常用來排序的兩種方法
冒泡排序
例子:
public static void main(String[] args) {
實現學生成績排序並顯示學生成績列表
int [ ] arr = {78,89,67,98,90,56,88};
①
N個數的數組,需要比較N-1輪
for(int i=0; i<arr.length; i++){ for(int j=i; j<arr.length; j++){ if(arr[i]>arr[j]){ int temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } }
②
冒泡排序 升序排列
for(int i=0; i<arr.length-1; i++){ for(int j=0; j<arr.length-1-i; j++){ if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } }
二分法排序
二分法查找
int start = 0; // 默認起始坐標 int end = arr.length-1; // 默認結尾坐標 int index = -1; // 找不到默認index為-1 while(start<=end){ int middle = (start+end)/2; // 計算中間下標 if(num == arr[middle]){ index = middle; break; } if(num > arr[middle]){ start = middle + 1; } if(num < arr[middle]){ end = middle - 1; } } System.out.println(index); } }
下面是一些實例.
① 做一個購物清單,手動輸入金額,輸出是要顯示總金額
Scanner in=new Scanner( System.in); double sum=0; double[ ] arr=new double[5]; for (int i = 0; i < arr.length; i++) { System.out.print("請輸入第"+(i+1)+"筆購物金額:"); arr[i]=in.nextDouble(); sum+=arr[i]; } System.out.println("序號\t\t 金額"); for (int i = 0; i < arr.length; i++) { System.out.println((i+1)+"\t\t"+arr[i]); } System.out.println("總金額:"+sum ); }
顯示結果為

②輸入四家店的價格,並找出最小價格
Scanner in=new Scanner(System.in); int[] arr=new int[4]; System.out.println("請輸入四家店的價格"); for (int i = 0; i <4; i++) { System.out.print("第"+(i+1)+"店的價格為:"); arr[i]=in.nextInt(); } for (int j = 0; j < arr.length-1; j++) { if (arr[j]<arr[j+1]) { arr[j+1]=arr[j]; }else { arr[j+1]=arr[j+1]; } }System.out.println("最低價格是:"+arr[3]); }
顯示結果為

③將一個數組從小到大排列
int[] arr={56,45,99,82,91,81}; int max; int m; for (int i = 0; i < arr.length-1; i++) { for (int j = 0; j < arr.length-1-i; j++) { if (arr[j]>arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for (int a: arr) {
System.out.println(a);
}
}
}
顯示結果為

④輸入一個數字,在數組中查找,若有輸出下標,若沒有輸出-1
Scanner in=new Scanner(System.in); int[] arr={12,34,46,68,32,35,75,48,25}; System.out.println("輸入一個數字"); int sz=in.nextInt(); for (int i = 0; i < arr.length; i++) { if (sz==arr[i]) { System.out.println("數字下標為"+i); return; } } System.out.println("-1");
顯示結果為

⑤編寫JAVA程序,實現兩個數組的合並,並按升序排列合並后的數組
假定現有兩個數組,分別為:
int[ ] arr1={3, 1, 23};
int[ ] arr2={27, 7, 2};
設計程序,將兩個數組合並成一個數組,並按升序排列合並后的數組,輸出合並前和合並后的數組信息
假定現有兩個數組,分別為:
int[ ] arr1={3, 1, 23};
int[ ] arr2={27, 7, 2};
設計程序,將兩個數組合並成一個數組,並按升序排列合並后的數組,輸出合並前和合並后的數組信息
int[ ] arr1 = {3, 1, 23}; int[ ] arr2 = {27, 7, 2}; int[ ] arr = new int[arr1.length+arr2.length]; // 1. 聲明一個數組,長度等於兩個數組的長度和 for(int i=0; i<arr1.length; i++){ // 2. 遍歷兩個數組 arr[i] = arr1[i]; } for(int i=0; i<arr2.length; i++){ arr[arr1.length+i] = arr2[i]; } for(int i=0; i <arr.length-1; i++){ // 3. 對新數組排序 for(int j=0; j <arr.length-1-i; j++){ if( arr [ j ]>arr[ j+1 ]){ int temp = arr[ j ]; arr [ j ] = arr[ j+1 ]; arr[ j+1 ] = temp; } } } System.out.println(Arrays.toString(arr));
顯示結果為

⑥用數組,判斷一個數字,是不是回文數。
顯示結果為
System.out.print("請輸入一個數組:"); Scanner in = new Scanner(System.in); long num = in.nextLong(); long old = num; // 暫存num int count = 0; // num有幾位,定義一個幾位的數組。 求出num的位數 while(num>0){ num /= 10; count++; } int[] arr = new int[count]; count = 0; // 不斷取出數字的每一位,依次放入數組中 while(old>0){ arr[count] = (int)old % 10; old /= 10; count ++; } for(int i=0,j=arr.length-1; i<=j ; i++,j--){ // 依次比較數組的首尾。 有任意一位不相等,就不是回文數 if(arr[i] != arr[j]){ System.out.println("不是回文數"); return; } } System.out.println("是回文數");
顯示結果為

⑦ 輸入數組,最大的與第一個元素交換,最小的與最后一個元素交換,輸出數組
// Scanner in=new Scanner(System.in); //設置輸入數組 // int [] arr; // System.out.println("輸入數組"); // for (int i = 0; i < arr.length; i++) { // int arr[i]=in.nextInt(); int [ ] arr = {5,3,7,1,0,6,9,2}; int max = arr[0] , maxIndex = 0; // 找出最大元素的下標 for(int i=0; i<arr.length; i++){ if(max < arr[i]){ max = arr[i]; maxIndex = i; } } if( maxIndex != 0 ){ int temp = arr[0]; arr[0] = arr[maxIndex]; arr[maxIndex] = temp; } int min = arr[0] , minIndex = 0; //找出最小元素的下標 for(int i=0; i<arr.length; i++){ if(min > arr[i]){ min = arr[i]; minIndex = i; } } if(minIndex != (arr.length-1)){ int temp = arr[arr.length-1]; arr[arr.length-1] = arr[minIndex]; arr[minIndex] = temp; } System.out.println(Arrays.toString(arr)); }
顯示結果為
