1. 程式人生 > >Java基礎知識複習(三)--陣列

Java基礎知識複習(三)--陣列

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);
	}

}