Java二維數(shù)組的用法!

????????為了方便組織各種信息,計(jì)算機(jī)常將信息以表的形式進(jìn)行組織,然后再以行和列的形式呈現(xiàn)出來。二維數(shù)組的結(jié)構(gòu)決定了其能非常方便地表示計(jì)算機(jī)中的表,以第一個(gè)下標(biāo)表示元素所在的行,第二個(gè)下標(biāo)表示元素所在的列。下面簡單了解一下二維數(shù)組,包括數(shù)組的聲明和初始化。

創(chuàng)建二維數(shù)組

????????在Java中二維數(shù)組被看作數(shù)組的數(shù)組,即二維數(shù)組為一個(gè)特殊的一維數(shù)組,其每個(gè)元素又是一個(gè)一維數(shù)組。Java 并不直接支持二維數(shù)組,但是允許定義數(shù)組元素是一維數(shù)組的一維數(shù)組,以達(dá)到同樣的效果。聲明二維數(shù)組的語法如下:

type arrayName[][];? ? // 數(shù)據(jù)類型 數(shù)組名[][];

type[][] arrayName;? ? // 數(shù)據(jù)類型[][] 數(shù)組名;

????????其中,type 表示二維數(shù)組的類型,arrayName 表示數(shù)組名稱,第一個(gè)中括號表示行,第二個(gè)中括號表示列。

????????下面分別聲明 int 類型和 char 類型的數(shù)組,代碼如下:

int[][] age;

char[][] sex;

初始化二維數(shù)組

????????二維數(shù)組可以初始化,和一維數(shù)組一樣,可以通過 3 種方式來指定元素的初始值。這 3 種方式的語法如下:

type[][] arrayName = new type[][]{值 1,值 2,值 3,…,值 n};? ? // 在定義時(shí)初始化

type[][] arrayName = new type[size1][size2];? ? // 給定空間,在賦值

type[][] arrayName = new type[size][];? ? // 數(shù)組第二維長度為空,可變化

例 1

使用第一種方式聲明 int 類型的二維數(shù)組,然后初始化該二維數(shù)組。代碼如下:

int[][] temp = new int[][]{{1,2},{3,4}};

上述代碼創(chuàng)建了一個(gè)二行二列的二維數(shù)組 temp,并對數(shù)組中的元素進(jìn)行了初始化。下圖為該數(shù)組的內(nèi)存結(jié)構(gòu)。

二維數(shù)組內(nèi)存結(jié)構(gòu)

????????使用第二種方式聲明 int 類型的二維數(shù)組,然后初始化該二維數(shù)組。代碼如下:

int[][] temp = new int[2][2];

????????使用第三種方式聲明 int 類型的二維數(shù)組,并且初始化數(shù)組。代碼如下:

int[][] temp = new int[2][];

獲取單個(gè)元素

????????在上部分使用的前 2 種方式創(chuàng)建并初始化了一個(gè)二行二列的 int 類型數(shù)組 temp。當(dāng)需要獲取二維數(shù)組中元素的值時(shí),也可以使用下標(biāo)來表示。語法如下:

arrayName[i-1][j-1];

????????其中,arrayName 表示數(shù)組名稱,i 表示數(shù)組的行數(shù),j 表示數(shù)組的列數(shù)。例如,要獲取第二行第二列元素的值,應(yīng)該使用 temp[1][1]來表示。這是由于數(shù)組的下標(biāo)起始值為 0,因此行和列的下標(biāo)需要減 1。

例 2

通過下標(biāo)獲取 class_score 數(shù)組中第二行第二列元素的值與第四行第一列元素的值。代碼如下:

public static void main(String[] args) {

double[][] class_score = {{10.0,99,99},{100,98,97},{100,100,99.5},{99.5,99,98.5}};

? ? System.out.println("第二行第二列元素的值:"+class_score[1][1]);

? ? System.out.println("第四行第一列元素的值:"+class_score[3][0]);

}

執(zhí)行上述代碼,輸出結(jié)果如下:

第二行第二列元素的值:98.0

第四行第一列元素的值:99.5

獲取全部元素

????????在一維數(shù)組中直接使用數(shù)組的 length 屬性獲取數(shù)組元素的個(gè)數(shù)。而在二維數(shù)組中,直接使用 length 屬性獲取的是數(shù)組的行數(shù),在指定的索引后加上 length(如 array[0].length)表示的是該行擁有多少個(gè)元素,即列數(shù)。

????????如果要獲取二維數(shù)組中的全部元素,最簡單、最常用的辦法就是使用 for 語句。在一維數(shù)組全部輸出時(shí),我們使用一層 for 循環(huán),而二維數(shù)組要想全部輸出,則使用嵌套 for 循環(huán)(2 層 for 循環(huán))。

例 3

使用 for 循環(huán)語句遍歷 double 類型的 class_score 數(shù)組的元素,并輸出每一行每一列元素的值。代碼如下:

public static void main(String[] args) {

double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };

for (int i = 0; i < class_score.length; i++) { // 遍歷行

for (int j = 0; j < class_score[i].length; j++) {

? ? ? ? ? ? System.out.println("class_score[" + i + "][" + j + "]=" + class_score[i][j]);

}

}

}

????????上述代碼使用嵌套 for 循環(huán)語句輸出二維數(shù)組。在輸出二維數(shù)組時(shí),第一個(gè) for 循環(huán)語句表示以行進(jìn)行循環(huán),第二個(gè) for 循環(huán)語句表示以列進(jìn)行循環(huán),這樣就實(shí)現(xiàn)了獲取二維數(shù)組中每個(gè)元素的值的功能。

????????執(zhí)行上述代碼,輸出結(jié)果如下所示。

class_score[0][0]=100.0

class_score[0][1]=99.0

class_score[0][2]=99.0

class_score[1][0]=100.0

class_score[1][1]=98.0

class_score[1][2]=97.0

class_score[2][0]=100.0

class_score[2][1]=100.0

class_score[2][2]=99.5

class_score[3][0]=99.5

class_score[3][1]=99.0

class_score[3][2]=98.5

例 4

????????假設(shè)有一個(gè)矩陣為 5 行 5 列,該矩陣是由程序隨機(jī)產(chǎn)生的 10 以內(nèi)數(shù)字排列而成。下面使用二維數(shù)組來創(chuàng)建該矩陣,代碼如下:

public class Test11 {

public static void main(String[] args) {

// 創(chuàng)建一個(gè)二維矩陣

int[][] matrix = new int[5][5];

// 隨機(jī)分配值

for (int i = 0; i < matrix.length; i++) {

for (int j = 0; j < matrix[i].length; j++) {

? ? ? ? ? ? ? ? matrix[i][j] = (int) (Math.random() * 10);

}

}

? ? ? ? System.out.println("下面是程序生成的矩陣\n");

// 遍歷二維矩陣并輸出

for (int k = 0; k < matrix.length; k++) {

for (int g = 0; g < matrix[k].length; g++) {

? ? ? ? ? ? ? ? System.out.print(matrix[k][g] + "");

}

? ? ? ? ? ? System.out.println();

}

}

}

????????在該程序中,首先定義了一個(gè)二維數(shù)組,然后使用兩個(gè)嵌套的 for 循環(huán)向二維數(shù)組中的每個(gè)元素賦值。其中,Math.random() 方法返回的是一個(gè) double 類型的數(shù)值,數(shù)值為 0.6、0.9 等,因此乘以 10 之后為 10 以內(nèi)的整數(shù)。最后又使用了兩個(gè)嵌套的 for 循環(huán)遍歷二維數(shù)組,輸出二維數(shù)組中的值,從而產(chǎn)生矩陣。

????運(yùn)行該程序的結(jié)果如下所示。

下面是程序生成的矩陣

78148

69230

43823

75663

05688

????????for each 循環(huán)語句不能自動處理二維數(shù)組的每一個(gè)元素。它是按照行, 也就是一維數(shù)組處理的。要想訪問二維教組 a 的所有元素, 需要使用兩個(gè)嵌套的循環(huán), 如下所示:

for (double[] row : a) {

for (double value : row) {

......

}

}

把【例2】修改為使用 for each 循環(huán)語句輸出,代碼如下所示:

public static void main(String[] args) {

double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };

for (double[] row : class_score) {

for (double value : row) {

? ? ? ? ? ? System.out.println(value);

}

}

}

輸出結(jié)果為:

100.0

99.0

99.0

100.0

98.0

97.0

100.0

100.0

99.5

99.5

99.0

98.5

提示:要想快速地打印一個(gè)二維數(shù)組的數(shù)據(jù)元素列表,可以調(diào)用:

System.out.println(Arrays.deepToString(arrayName));

代碼如下:

System.out.println(Arrays.deepToString(class_score));

輸出格式為:

[[100.0, 99.0, 99.0], [100.0, 98.0, 97.0], [100.0, 100.0, 99.5], [99.5, 99.0, 98.5]]

獲取整行元素

????????除了獲取單個(gè)元素和全部元素之外,還可以單獨(dú)獲取二維數(shù)組的某一行中所有元素的值,或者二維數(shù)組中某一列元素的值。獲取指定行的元素時(shí),需要將行數(shù)固定,然后只遍歷該行中的全部列即可。

例 5

編寫一個(gè)案例,接收用戶在控制臺輸入的行數(shù),然后獲取該行中所有元素的值。代碼如下:

public static void main(String[] args) {

double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };

Scanner scan = new Scanner(System.in);

? ? System.out.println("當(dāng)前數(shù)組只有" + class_score.length + "行,您想查看第幾行的元素?請輸入:");

int number = scan.nextInt();

for (int j = 0; j < class_score[number - 1].length; j++) {

? ? ? ? System.out.println("第" + number + "行的第[" + j + "]個(gè)元素的值是:" + class_score[number - 1][j]);

}

}

執(zhí)行上述代碼進(jìn)行測試,輸出結(jié)果如下所示。

當(dāng)前數(shù)組只有4行,您想查看第幾行的元素?請輸入:

3

第3行的第[0]個(gè)元素的值是:100.0

第3行的第[1]個(gè)元素的值是:100.0

第3行的第[2]個(gè)元素的值是:99.5

獲取整列元素

????????獲取指定列的元素與獲取指定行的元素相似,保持列不變,遍歷每一行的該列即可。

例 6

編寫一個(gè)案例,接收用戶在控制臺中輸入的列數(shù),然后獲取二維數(shù)組中所有行中該列的值。代碼如下:

public static void main(String[] args) {

double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };

Scanner scan = new Scanner(System.in);

? ? System.out.println("您要獲取哪一列的值?請輸入:");

int number = scan.nextInt();

for (int i = 0; i < class_score.length; i++) {

? ? ? ? System.out.println("第 " + (i + 1) + " 行的第[" + number + "]個(gè)元素的值是" + class_score[i][number]);

}

}

執(zhí)行上述代碼進(jìn)行測試,如下所示。

您要獲取哪一列的值?請輸入:

2

第 1 行的第[2]個(gè)元素的值是99.0

第 2 行的第[2]個(gè)元素的值是97.0

第 3 行的第[2]個(gè)元素的值是99.5

第 4 行的第[2]個(gè)元素的值是98.5

更多Java學(xué)習(xí)視頻

Java基礎(chǔ):Java300集,Java必備優(yōu)質(zhì)視頻_手把手圖解學(xué)習(xí)Java,讓學(xué)習(xí)成為一種享受

Java項(xiàng)目:

【Java游戲項(xiàng)目】1小時(shí)教你用Java語言做經(jīng)典掃雷游戲_手把手教你開發(fā)游戲

【Java畢業(yè)設(shè)計(jì)】OA辦公系統(tǒng)項(xiàng)目實(shí)戰(zhàn)_OA員工管理系統(tǒng)項(xiàng)目_java開發(fā)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容