1. 程式人生 > >Java第七章——多維陣列

Java第七章——多維陣列

一、二維陣列的基礎知識
二維陣列中的元素通過行和列的下標來訪問。
1.宣告二維陣列變數並建立二維陣列
資料型別【】【】 陣列名;
資料型別 陣列名【】【】;//允許這種方式,但不推薦使用
2.獲取二維陣列的長度
二維陣列實際上是一個一維陣列,它的每個元素都是一個一維陣列。陣列x的長度是陣列中元素的個數,可以用x.length獲取該值。元素x[0],x[1],…,x[x.length-1]也是陣列。可以使用x[0].length,x[1].length,…,x[x.length-1].length獲取它們的長度。
3.鋸齒陣列
二維陣列中的每一行本身就是一個數組,因此,各行的長度就可以不同。這樣的陣列稱為鋸齒陣列(ragged array).
在這裡插入圖片描述


上圖就是一個鋸齒陣列,如果不知道鋸齒陣列的值,但知道它的長度,可以試用一下語法:
int [][] triangleArray [0 ] = new int[5] [ ];
triangleArray[0]=new int[5];
triangleArray[1]=new int[4];
triangleArray[2]=new int[3];
triangleArray[3]=new int[2];
triangleArray[4]=new int[1];
使用語法new int[5] [ ] 建立陣列時,必須指定第一個下標。語法new int[ ][ ]是錯誤的。
二、處理二維陣列
巢狀的for迴圈常用於處理二維陣列。
假設如下建立陣列matrix:
int [] [] matrix=new int[10][10];
下面是一些處理二維陣列的例子:
1)(使用輸入值初始化陣列)下面的迴圈使用使用者輸入值初始化陣列:

java.util.Scanner input =new Scanner(System.in);
System.out.println("Enter "+matrix.length+" rows and"+matrix[0].length+" columns:");
  for(int row=0;row<matrix.length;row++){
    for(int column=0;column<matrix[row].length;column++){
matrix[row] [column]=input.nextInt();
}
}

2)(使用隨機數值初始化陣列)下面的迴圈使用0到99之間的隨機值初始化陣列:

 for(int row=0;row<matrix.length;row++){
        for(int column=0;column<matrix[row].length;column++){
        matrix[row][column]=(int)(Math.random()*100);
        }
       }

3)(列印陣列)為列印一個二維陣列,必須使用如下所示的迴圈列印陣列中的每個元素:

for(int row=0;row<matrix.length;row++){
        for(int column=0;column<matrix[row].length;column++){
        System.out.print(matrix[row][column]+" ");
        }
        System.out.println();
        }

4)(求所有元素的和)使用名為total的變數儲存和。將total初始化為0.利用類似下面的迴圈,把陣列中的每一個元素都加到total上:

int total=0;
for(int row=0;row<matrix.length;row++){
for(int column=0;column<matrix[row].length;column++){
total+=matrix[row][column];
}
}

5)(對陣列按列求和)對於每一列,使用名為total的變數儲存它的和。利用類似下面的迴圈,將該列中的每個元素加到total上:

for(int column=0;column<matrix[0].length;column++){
int total=0;
for(int row=0;row<matrix.length;row++)
total+=matrix[row][column];
System.out.println("Sum for column "+column +" is "+total);
}

6)(哪一行的和最大?)使用變數maxRow和indexOfMaxRow分別跟蹤和的最大值以及該行的索引值。計算每一行的和,如果計算出的新行的和更大,就更新maxRow和indexOfMaxRow.

int maxRow=0;
int indexOfMaxRow=0;
//Get sum of the first row in maxRow
for(int column=0;column<matrix[0].length;column++){
maxRow+=matrix[0][column];
}
for(int row=1;row<matrix.length;column++){
int totalOfThisRow=0;
for(int column=0;column<matrix[row].length;column++)
totalOfThisRow+=matrix[row][column];
if(totalOfThisRow>maxRow){
maxRow=totalOfThisRow;
indexOfMaxRow=row;
}
}
System.out.println("Row "+indexOfMaxRow+" has the maximum sum of "+maxRow);

7)(隨意打亂)對每個元素matrix[i][j],隨機產生下標i1和j1,然後互換matrix[i][j]和matrix[i1][j1],

for(int i=0;i<matrix.length;i++){
	for(int j=0;j<matrix[i].length;j++){
	
	int j1=(int)(Math.random()*matrix[i].length);
int temp=matrix[i][j];
matrix[i][j]=matrix[i1][j1];
matrix[i1][j1]=temp;
}
}

三、將二維陣列傳遞給方法
將一個二維陣列傳遞給方法的時候,陣列的引用傳遞給了方法。
可以像傳遞一維陣列一樣,給方法傳遞二位陣列。也可以從一個方法返回一個數組。
四、多維陣列
二維陣列由一個一維陣列的陣列組成,而一個三維陣列可以認為是由一個二維陣列的陣列所組成。