Java基礎知識複習(三)--陣列
阿新 • • 發佈:2018-12-30
1.冒泡法排序
冒泡法排序的思路:
- 第一步:從第一位開始,把相鄰兩位進行比較,如果發現前面的比後面的大,就把大的資料交換在後面,迴圈比較完畢後, 最後一位就是最大的
- 第二步: 再來一次,只不過不用比較最後一位
以此類推
package review3; public class Test2 { public static void main(String[] args) { int[] a = new int[6]; bubble(a,a.length); } static void bubble(int[] a, int i) { //未排序 System.out.print("未排序:"); for(int j = 0; j < i; j++) { //生成1~100的隨機數 a[j] = (int) (Math.random()*100); System.out.print(a[j]+" "); } for(int j = 0; j < i-1; j++) { for(int k = 0; k < i-j-1; k++) { if(a[k] > a[k+1]) { int temp = a[k]; a[k] = a[k+1]; a[k+1] = temp; } } } //氣泡排序後 System.out.print("\n氣泡排序後:"); for(int j = 0; j < i; j++) { System.out.print(a[j]+" "); } } }
2.選擇法排序
選擇法排序的思路:
- 把第一位和其他所有的進行比較,只要比第一位小的,就換到第一個位置來,比較完後,第一位就是最小的,
- 然後再從第二位和剩餘的其他所有進行比較,只要比第二位小,就換到第二個位置來,比較完後,第二位就是第二小的
以此類推
package review3; import java.lang.reflect.Array; import java.util.Scanner; public class Text1 { public static void main(String[] args) { int[] a = new int[6]; select(a,a.length); } static void select(int[] a, int i) { //未排序 System.out.println("未排序:"); for(int j = 0; j < i; j++) { //生成1~100的隨機數 a[j] = (int) (Math.random()*100); System.out.print(a[j]+" "); } for(int j = 0; j < i-1; j++) { for(int k = j+1; k < i; k++) { if(a[j] > a[k]) { int temp = a[k]; a[k] = a[j]; a[j] = temp; } } } //選擇排序後 System.out.println("\n選擇排序後:"); for(int j = 0; j < i; j++) { System.out.print(a[j]+" "); } } }
3.用增強型for迴圈找出最大的那個數
利用增強型for迴圈遍歷陣列,每次都與最大值變數max比較,如果遍歷到的值大於max則把值賦予max。
需要注意的是:增強型for迴圈只能用來取值,卻不能用來修改數組裡的值
package review3; public class Test3 { public static void main(String[] args) { int[] a = new int[5]; int max = 0; //企圖用增強型for迴圈和隨機數初始化陣列 for(int value : a) { value = (int)(Math.random()*100); } System.out.print("企圖用增強型for迴圈初始化陣列失敗:"); //普通for迴圈和隨機數初始化陣列 for(int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); a[i] = (int)(Math.random()*100); } System.out.print("\n普通for迴圈初始化陣列"); //增強型for迴圈篩選出最大值 for(int value : a) { System.out.print(value+" "); if(value > max) { max = value; } } System.out.println("\n最大值:"+max); } }
4.練習-合併陣列
首先準備兩個陣列,他倆的長度是5-10之間的隨機數,並使用隨機數初始化這兩個陣列,然後準備第三個陣列,第三個陣列的長度是前兩個的和,最後通過System.arraycopy 把前兩個數組合併到第三個陣列中
package review3;
import java.util.Random;
public class Test4 {
public static void main(String[] args) {
int a = (int)(Math.random()*6+5);//生成5~10的隨機數
int b = new Random().nextInt(6)+5;//生成5~10的隨機數
int[] array1 = new int[a];
int[] array2 = new int[b];
int[] array3 = new int[a+b];
System.out.println("陣列1的內容:");
for(int i = 0; i < array1.length; i++) {
array1[i] = new Random().nextInt(100)+1;//生成1~100的隨機數
System.out.print(array1[i]+" ");
}
System.out.println("\n陣列2的內容:");
for(int i = 0; i < array2.length; i++) {
array2[i] = new Random().nextInt(101)+1;//生成1~100的隨機數
System.out.print(array2[i]+" ");
}
//複製陣列
/**System.arraycopy(src, srcPos, dest, destPos, length)
*rc: 源陣列
*srcPos: 從源陣列複製資料的起始位置
*dest: 目標陣列
*destPos: 複製到目標陣列的起始位置
*length: 複製的長度
**/
System.arraycopy(array1, 0, array3, 0, array1.length);
System.arraycopy(array2, 0, array3, array1.length, array2.length);
System.out.println("\n合併後的陣列:");
for(int value : array3) {
System.out.print(value+" ");
}
}
}
5.練習-二維陣列
定義一個5X5的二維陣列。 然後使用隨機數填充該二維陣列,找出這個二維數組裡,最大的那個值,並打印出其二維座標
package review3;
import java.util.Random;
public class Test5 {
public static void main(String[] args) {
int[][] a = new int[5][5];
int max = 10;
//最大值的座標值
int x = 0;
int y = 0;
System.out.println("初始化二維陣列:");
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
//隨機生成10~99的整數
a[i][j] = new Random().nextInt(90)+10;
System.out.print(a[i][j]+" ");
}
System.out.println();
}
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
if(a[i][j] > max) {
max = a[i][j];
x = i;
y = j;
}
}
}
System.out.print("找到最大值:"+max);
System.out.printf(",其座標是[%d][%d]",x,y);
}
}