亞馬遜線上商店大面積故障, 全球超 3.8 萬名使用者受影響
阿新 • • 發佈:2021-07-12
第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();
}
}
}
//楊輝三角