1. 程式人生 > 資訊 >亞馬遜線上商店大面積故障, 全球超 3.8 萬名使用者受影響

亞馬遜線上商店大面積故障, 全球超 3.8 萬名使用者受影響

第10天

Day10

繼續陣列學習

陣列型別引數

基本資料型別傳遞:傳遞值,一方改變不會影響另一方

引用資料型別傳遞:傳遞地址值,一方改變會影響另一方

public class TestArray01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/* 引數型別:基本資料型別 引用資料型別 */
		//基本資料型別
		/*
		int a = 10;//區域性變數存放在棧中
		print1(a);//實參 為區域性變數進行賦值
		System.out.println(a);
		*/
		
		//引用資料型別
		int [] nums = {10,20,30,40};//引用資料型別傳地址值 引用資料型別放在堆中
		printArray(nums);
		System.out.println("主方法遍歷陣列");
		for (int i = 0; i < nums.length; i++) {
			System.out.println(nums[i]+"\t");
		}
		System.out.println();
	}
	
	public static void printArray(int [] nums) {
		for (int i = 0; i < nums.length; i++) {
			nums[i] += 5;
		}
		System.out.println("printArray方法遍歷陣列");
		for (int i = 0; i < nums.length; i++) {
			System.out.println(nums[i]+"\t");
		}
		System.out.println();
	}
	public static void print1(int a) {//形參 區域性變數的宣告
		a += 5;
		System.out.println(a);		
	}

}

陣列型別返回值

public class TestArray02 {

	public static void main(String[] args) {
		//陣列型別返回值
		int [] nums = {111,222,333,444,555};//假如地址為0x0000A001
		
		int [] na = expand(nums);//0x0000B002
		for (int i = 0; i < na.length; i++) {
			System.out.println(na[i]+"\t");
		}
		System.out.println();
	}
	public static int[] expand(int [] arr) {//0x0000A001
		int [] newNums = new int[arr.length*2];//構造,開闢新空間 0x0000B002
		//複製
		for (int i = 0; i < arr.length; i++) {
			newNums[i] = arr[i];
		}
		return newNums;//0x0000B002
	}
}
public class TestArray03 {

	public static void main(String[] args) {
		//陣列型別返回值
		int [] nums = {111,222,333,444,555};//假如地址為0x0000A001
				
		expand(nums);//0x0000B002 沒有接收的,釋放
		for (int i = 0; i < nums.length; i++) {
			System.out.println(nums[i]+"\t");
		}
		System.out.println();
	}
	public static int[] expand(int [] arr) {//0x0000A001
		int [] newNums = new int[arr.length*2];//構造,開闢新空間 0x0000B002
		//複製
		for (int i = 0; i < arr.length; i++) {
			newNums[i] = arr[i];
		}
		return newNums;//0x0000B002
	}
}

可變長引數

概念:可接收多個同類型實參,個數不限,使用方式與陣列相同

語法:資料型別 ... 形參名 //必須定義在形參列表最後,且只能有一個

public class TestArray04 {
	public static void main(String[] args) {
		//可變長引數JDK1.5之後
		//語法:資料型別...形參名
		int [] nums = {10,20,30,40,50};
		printArray(nums);
		
		printArray();//底層new陣列
		
		printArray(1);
		
		printArray(1,2);
		
		printArray(1,2,3,4);
	}
	public static void printArray(int ... arr) {
		System.out.println("遍歷引數");
		for (int a : arr) {
			System.out.println(a+"\t");
		}
		System.out.println();
	}
}

陣列排序

氣泡排序

原理:相鄰兩個數值比較大小,互換位置

記憶:外層迴圈 length - 1,內層迴圈 length - i - 1

public class TestBubble {
	public static void main(String[] args) {
		//氣泡排序:相鄰兩個數比較大小,互換位置
		
		int [] nums = {4,3,5,2,1};
		/*
		int a = 10;
		int b = 20;
		
		int temp = a;
		a = b;
		b = temp;
		
		System.out.println(a);//20
		System.out.println(b);//10
		*/
		
		
		//前一個數比後一個數大,交換
		
		for (int i = 0; i < nums.length-1; i++) {//控制輪數
			for (int j = 0; j < nums.length-1-i; j++) {//控制次數
				if (nums[j] > nums[j+1]) {					
					int temp = nums[j];
					nums[j] = nums[j+1];
					nums[j+1] = temp;
				}
			}
		}
		for (int k = 0; k < nums.length; k++) {
			System.out.print(nums[k]+"\t");
		}
		System.out.println();
	}

}

選擇排序

原理:固定值與其他值依次比較大小,互換位置

記憶:外層迴圈 length - 1,內層迴圈開始位置 j = i + 1

public class TestSelect {
	public static void main(String[] args) {
		//選擇排序:固定值與其他值依次比較大小,互換位置
		int [] nums = {4,3,5,2,1};
		for (int i = 0; i < nums.length - 1; i++) {//控制輪數
			//不與自身比較
			for (int j = i + 1; j < nums.length; j++) {//控制次數
				if (nums[i] > nums[j]) {
					int temp = nums[i];
					nums[i] = nums[j];
					nums[j] = temp;
				}
			}
		}
		for (int k = 0; k < nums.length; k++) {
			System.out.print(nums[k]+"\t");
		}
		System.out.println();
	}

}

JDK排序

java.util.Arrays.sort(陣列名)//JDK提供(升序)

public class TestJDK {
	public static void main(String[] args) {
		//JDK排序:java.util.Arrays.sort(陣列名)//JDK提供(升序)
		
		int [] nums = {4,5,3,2,1};
		java.util.Arrays.sort(nums);
		
		
		for (int i = 0; i < nums.length; i++) {
			System.out.print(i+"\t");
		}
		//逆序排序
		System.out.println("逆序排序");
		for (int j = 0; j < nums.length/2; j++) {
			int temp = nums[j];
			nums[j] = nums[nums.length-1-j];
			nums[nums.length-1-j] = temp;
		}
		System.out.println();
		for (int i : nums) {
			System.out.print(i+"\t");
		}
	}

}

二維陣列(二重迴圈)

概念:一維陣列中的一維陣列;陣列中的元素,還是陣列

注意:高維陣列中的每一個元素,儲存了低維陣列的地址。訪問array[0]等價於在訪問0x0000A111

public class TestDArray1 {
	public static void main(String[] args) {
		//定義二維陣列                         行        列   
		//資料型別 [][] 陣列名 = new 資料型別[高維長度][低維長度];
		//資料型別 陣列名[][] = new 資料型別[高維長度][低維長度];
		
		int [][] nums = new int[3][5];
		//int nums [][] = new int[3][5];
		
		//存值
		nums[0][0] = 10;//第一行第一列
		nums[0][3] = 20;
		nums[1][0] = 30;
		nums[1][1] = 40;
		nums[2][2] = 50;
		nums[2][4] = 60;
		
		//取值
		System.out.println(nums.length);//行3
		System.out.println(nums[0].length);//訪問低維長度 首個低維陣列的長度 列5
		System.out.println(nums[1].length);//列5
		System.out.println(nums[2].length);//列5
		
		//遍歷二維陣列
		for (int i = 0; i < nums.length; i++) {//遍歷行 i = 0,1...
			for (int j = 0; j < nums[i].length-1; j++) {//遍歷列
				System.out.print(nums[i][j]+"\t");
			}
			System.out.println();
		}
		
		//高維陣列中的每一個元素,儲存了低維陣列的地址。訪問array[0]等價於在訪問0x0000A111
		System.out.println(nums);
		System.out.println(nums[0]);
		System.out.println(nums[1]);
		System.out.println(nums[2]);
	}
}
public class TestDArray2 {
	public static void main(String[] args) {
		/*
		 二維陣列的建立語法
		 先宣告、再分配空間:
		 資料型別[][] 陣列名;
		 陣列名 = new 資料型別[高維長度][低維長度];
		int[][] nums;
		nums=new int[3][5];
		宣告並分配空間:
		資料型別[][] 陣列名 = new 資料型別[高維長度][低維長度];
		int[][] nums=new int[3][5];
		宣告並賦值(繁):
		資料型別[][] 陣列名 = new 資料型別[高維長度][]; //不規則陣列,自行new低維陣列
		宣告並賦值(簡):
		資料型別[][] 陣列名 = { {v1,v2,v3},{v4,v5},{v6,v7,v8,v9} }; //顯示初始化
		 */
		
		//宣告並賦值(繁)
		//資料型別[][] 陣列名 = new 資料型別[高維長度][];
		int [][] nums = new int [3][];
		
		//建立低維陣列
		int [] a = new int[3];
		nums[0] = new int[5];//第一行5列
		nums[1] = a;//第二行3列
		nums[2] = new int[2];//第三行2列
		
		//陣列有預設值 0
		System.out.println("遍歷二維陣列");
		for (int i = 0; i < nums.length; i++) {
			for (int j = 0; j < nums[i].length; j++) {
				System.out.print(nums[i][j]+"\t");
			}
			System.out.println();
		}
		
		//宣告並賦值(簡)
		//陣列型別 [][] 陣列名 = { {v1,v2,v3},{v4,v5},{v6,v7,v8,v9} }; //顯示初始化
		double [][] scores = {{3.14,12.6},{5.67},{4.14,7.89,6.12}};
		System.out.println("遍歷二維陣列");
		for (double[] score : scores) {
			for (double s : score) {
				System.out.print(s+"\t");
			}
			System.out.println();
		}
	}

}
//楊輝三角