Java?二維數(shù)組創(chuàng)建及使用方式
二維數(shù)組的創(chuàng)建
二維數(shù)組好比一個(gè)表格,第一個(gè)下標(biāo)表示行,第二個(gè)下標(biāo)表示列,數(shù)組的創(chuàng)建和初始化與一位數(shù)組一模一樣,及二維數(shù)組就是一個(gè)把多個(gè)一維數(shù)組包起來(lái)的數(shù)組。
數(shù)組的創(chuàng)建:
type[][] arrayName;或者 type arrayName[][];
數(shù)組的初始化:
給數(shù)組分配空間大小,不能被修改,在賦值。
type[][] arrayName=new type[length1][length2]
通過(guò)new給數(shù)組賦值,不給空間大小。
type[][] arrayName=new type[][]{{值1,值2,值3},{值1,值2,值3}};直接給數(shù)組賦值,空間大小不分配。
type[][] arrayName={{值1,值2,值3},{值1,值2,值3}};數(shù)組的二維長(zhǎng)度為空。
type[][] arrayName=new type[length1][];
數(shù)組元素的獲取:
二維數(shù)組要通過(guò)兩個(gè)下標(biāo)來(lái)獲取,例如:arrayName[0][0] 獲取最前面的元素值,arrayName[arrayName.length-1][arrayName[arrayName.length-1].length-1] 取出數(shù)組的最后一個(gè)元素。
例1:給定一個(gè)3行3列的二維數(shù)組,并初始化賦值,每行輸出三個(gè)就換行。
public class dome2{
??? ?public static void main(String[] args) {
??? ? ?int[][] a= {{1,6,5},{7,3,0},{1,5,7}};
??? ? ?
??? ? ?for(int i=0;i<a.length;i++) { ?//二維數(shù)組的行循環(huán)
??? ??? ? ?
??? ??? ? ?for(int j=0;j<a[i].length;j++) { ?//二維數(shù)組的列循環(huán)
??? ??? ??? ? ?
??? ??? ??? ? System.out.print(a[i][j]+" "); ?//輸出每個(gè)元素
??? ??? ??? ??
??? ??? ??? ? ?if(a[i][2]==a[i][j]) { ?//當(dāng)每一行輸出三列后換行
??? ??? ??? ??? ? ?
??? ??? ??? ??? ? ?System.out.println();
??? ??? ??? ??? ? ?
??? ??? ??? ? ?}
??? ??? ? ?}
??? ? ?}
?? ?}
}結(jié)果
1 6 5
7 3 0
1 5 7
例2: 循環(huán)輸入3行3列的二維數(shù)組,并將它順時(shí)針旋轉(zhuǎn)90°輸出三行三列。
import java.util.Scanner;
public class dome2{
??? ?public static void main(String[] args) {
??? ? ?int[][] a=new int[3][3];
??? ? ?Scanner sc=new Scanner(System.in);
??? ? ?//循環(huán)輸入
??? ? ?for(int i=0;i<a.length;i++) {
??? ??? ? ?for(int j=0;j<a[i].length;j++) {
??? ??? ??? ? ?a[i][j]=sc.nextInt();
??? ??? ? ?}
??? ? ?}
??? ? ?//每行3個(gè)換行
??? ? for(int i=0;i<a.length;i++) {
?? ??? ? ?for(int j=0;j<a[i].length;j++) {
?? ??? ??? ? ?System.out.print(a[i][j]+" ");
?? ??? ??? ? ?if(a[i][2]==a[i][j]) {
?? ??? ??? ??? ? ?System.out.println();
?? ??? ??? ? ?}
?? ??? ? ?}
?? ? ?}
??? ? //創(chuàng)建新的數(shù)組并且旋轉(zhuǎn)賦值
??? ? int[][] b=new int[3][3];
??? ? for(int i=0;i<3;i++) {
?? ??? ? ?for(int j=0;j<3;j++) {
?? ??? ??? ? ?b[j][2-i]=a[i][j];
?? ??? ? ?}
?? ? ?}
??? ? //循環(huán)輸出
??? ?for(int i=0;i<b.length;i++) {
?? ??? ? ?for(int j=0;j<b[i].length;j++) {
?? ??? ??? ? ?System.out.print(b[i][j]+" ");
?? ??? ??? ? ?if(b[i][2]==b[i][j]) {
?? ??? ??? ??? ? ?System.out.println();
?? ??? ??? ? ?}
?? ??? ? ?}
?? ? ?}
?? ?}
}結(jié)果
1 2 3 4 5 6 7 8 9
1 2 3
4 5 6
7 8 9
旋轉(zhuǎn)后的結(jié)果
7 4 1
8 5 2
9 6 3
二維數(shù)組基本使用
- 二維數(shù)組的應(yīng)用場(chǎng)景
- 比如我們開(kāi)發(fā)一個(gè)五子棋游戲,棋盤就是需要二維數(shù)組來(lái)表示。如圖:

1. 二維數(shù)組的使用
- 快速入門案例:TwoDimensionalArray01.java
- 請(qǐng)用二維數(shù)組輸出如下圖形
0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 3 0 0 0 0 0 0 0 0
//什么是二維數(shù)組:
//1. 從定義形式上看 int[][]
//2. 可以這樣理解,原來(lái)的一維數(shù)組的每個(gè)元素是一維數(shù)組, 就構(gòu)成二維數(shù)組
int[][] arr = { {0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0,2, 0, 3, 0, 0},
{0, 0, 0, 0, 0, 0} };
//輸出二維圖形
for(int i = 0; i < arr.length; i++) {//遍歷二維數(shù)組的每個(gè)元素
//遍歷二維數(shù)組的每個(gè)元素(數(shù)組)
//解讀
//1. arr[i] 表示 二維數(shù)組的第i+1個(gè)元素 比如arr[0]:二維數(shù)組的第一個(gè)元素
//2. arr[i].length 得到 對(duì)應(yīng)的 每個(gè)一維數(shù)組的長(zhǎng)度
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " "); //輸出了一維數(shù)組
}
System.out.println();//換行
}
- 舉例:訪問(wèn)二位數(shù)組中值為 3 的數(shù)組坐標(biāo)
//關(guān)于二維數(shù)組的關(guān)鍵概念
//(1)
System.out.println("二維數(shù)組的元素個(gè)數(shù)=" + arr.length);
//(2) 二維數(shù)組的每個(gè)元素是一維數(shù)組, 所以如果需要得到每個(gè)一維數(shù)組的值
// 還需要再次遍歷
//(3) 如果我們要訪問(wèn)第 (i+1)個(gè)一維數(shù)組的第j+1個(gè)值 arr[i][j];
// 舉例 訪問(wèn) 3, =》 它是第3個(gè)一維數(shù)組的第4個(gè)值 arr[3-1][4-1] = arr[2][3]
System.out.println("第3個(gè)一維數(shù)組的第4個(gè)值=" + arr[2][3]); //3- 3的值在二維數(shù)組里對(duì)應(yīng)的第3行第4列的值,3對(duì)應(yīng)的坐標(biāo)本來(lái)是 arr[3][4],但數(shù)組是從0開(kāi)始的,所以減1,就是arr[2][3],所以 3 對(duì)應(yīng)的實(shí)際坐標(biāo)就是arr[2][3]

2. 使用方式 1: 動(dòng)態(tài)初始化
TwoDimensionalArray02.java
1.語(yǔ)法: 類型[][] 數(shù)組名=new 類型[大小][大小]
2.比如: int a[][]=new int[2][3],表示這個(gè)二位數(shù)組里面有兩個(gè)一維數(shù)組,而每個(gè)一維數(shù)組里有三個(gè)元素
3.使用演示
- 沒(méi)有賦值,默認(rèn)值為 0
int arr[][] = new int[2][3];
//遍歷arr數(shù)組
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {//對(duì)每個(gè)一維數(shù)組遍歷
System.out.print(arr[i][j] +" ");
}
System.out.println();//換行
}
- 把上面的數(shù)組進(jìn)行初始化賦值,arr[1][1] = 8 表示 在第二個(gè)一維數(shù)組的第二個(gè)元素的值為 8
int arr[][] = new int[2][3];
arr[1][1] = 8;
//遍歷arr數(shù)組
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {//對(duì)每個(gè)一維數(shù)組遍歷
System.out.print(arr[i][j] +" ");
}
System.out.println();//換行
}二維數(shù)組在內(nèi)存的存在形式

3. 使用方式 2: 動(dòng)態(tài)初始化
TwoDimensionalArray02.java
- 先聲明:類型 數(shù)組名[][];
- 再定義(開(kāi)辟空間) 數(shù)組名 = new 類型[大小][大小];
- 賦值(有默認(rèn)值,比如 int 類型的就是 0)
- 使用演示
int arr[][]; //聲明二維數(shù)組 arr = new int[2][3]; //再開(kāi)空間
4. 使用方式 3: 動(dòng)態(tài)初始化-列數(shù)不確
TwoDimensionalArray03

代碼實(shí)現(xiàn):
/*
看一個(gè)需求:動(dòng)態(tài)創(chuàng)建下面二維數(shù)組,并輸出
i = 0: 1
i = 1: 2 2
i = 2: 3 3 3
一個(gè)有三個(gè)一維數(shù)組, 每個(gè)一維數(shù)組的元素是不一樣的
*/
//創(chuàng)建 二維數(shù)組,一個(gè)有3個(gè)一維數(shù)組,但是每個(gè)一維數(shù)組還沒(méi)有開(kāi)數(shù)據(jù)空間
int[][] arr = new int[3][];
for(int i = 0; i < arr.length; i++) {//遍歷arr每個(gè)一維數(shù)組
//給每個(gè)一維數(shù)組開(kāi)空間 new
//如果沒(méi)有給一維數(shù)組 new ,那么 arr[i]就是null
arr[i] = new int[i + 1];
//遍歷一維數(shù)組,并給一維數(shù)組的每個(gè)元素賦值
for(int j = 0; j < arr[i].length; j++) {
arr[i][j] = i + 1;//賦值
}
}
System.out.println("=====arr元素=====");
//遍歷arr輸出
for(int i = 0; i < arr.length; i++) {
//輸出arr的每個(gè)一維數(shù)組
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();//換行
}

5. 使用方式 4: 靜態(tài)初始化
TwoDimensionalArray04.java
- 定義 類型 數(shù)組名[][] = {{值 1,值 2..},{值 1,值 2..},{值 1,值 2..}}
- 使用即可 [ 固定方式訪問(wèn) ]
- 比如:
int[][] arr = {{1,1,1}, {8,8,9}, {100}};- 解讀
1.定義了一個(gè)二維數(shù)組 arr
2.arr 有三個(gè)元素(每個(gè)元素都是一維數(shù)組)
3.第一個(gè)一維數(shù)組有 3 個(gè)元素 , 第二個(gè)一維數(shù)組有 3 個(gè)元素, 第三個(gè)一維數(shù)組有 1 個(gè)元素
- 案例:
TwoDimensionalArray05.java
int arr[][]={{4,6},{1,4,5,7},{-2}}; 遍歷該二維數(shù)組,并得到和
/*
思路
1. 遍歷二維數(shù)組,并將各個(gè)值累計(jì)到 int sum
*/
int arr[][]= {{4,6},{1,4,5,7},{-2}};
int sum = 0;
for(int i = 0; i < arr.length; i++) {
//遍歷每個(gè)一維數(shù)組
for(int j = 0; j < arr[i].length; j++) {
sum += arr[i][j];
}
}
System.out.println("sum=" + sum);
6. 二維數(shù)組的應(yīng)用案例
使用二維數(shù)組打印一個(gè) 10 行楊輝三角 YangHui.java

int[][] yangHui = new int[12][];
for(int i = 0; i < yangHui.length; i++) {//遍歷yangHui的每個(gè)元素
//給每個(gè)一維數(shù)組(行) 開(kāi)空間
yangHui[i] = new int[i+1];
//給每個(gè)一維數(shù)組(行) 賦值
for(int j = 0; j < yangHui[i].length; j++){
//每一行的第一個(gè)元素和最后一個(gè)元素都是1
if(j == 0 || j == yangHui[i].length - 1) {
yangHui[i][j] = 1;
} else {//中間的元素
yangHui[i][j] = yangHui[i-1][j] + yangHui[i-1][j-1];
}
}
}
//輸出楊輝三角
for(int i = 0; i < yangHui.length; i++) {
for(int j = 0; j < yangHui[i].length; j++) {//遍歷輸出該行
System.out.print(yangHui[i][j] + "\t");
}
System.out.println();//換行.
}
7. 二維數(shù)組使用細(xì)節(jié)和注意事項(xiàng)
一維數(shù)組的聲明方式有:
int[] x 或者 int x[]
二維數(shù)組的聲明方式有:
int[][] y 或者 int[] y[] 或者 int y[][]
二維數(shù)組實(shí)際上是由多個(gè)一維數(shù)組組成的,它的各個(gè)一維數(shù)組的長(zhǎng)度可以相同,也可以不相同。比如: map[][] 是一個(gè)二維數(shù)組
int map [][] = {{1,2},{3,4,5}}由 map[0] 是一個(gè)含有兩個(gè)元素的一維數(shù)組 ,map[1] 是一個(gè)含有三個(gè)元素的一維數(shù)組構(gòu)成,我們也稱為列數(shù)不等的二維數(shù)組
8. 二維數(shù)組課堂練習(xí)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用idea快速搭建一個(gè)spring-cloud(圖文)
本文主要介紹了idea快速搭建一個(gè)spring-cloud,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Java使用Alibaba Druid數(shù)據(jù)庫(kù)連接池的技術(shù)指南
Druid是阿里巴巴開(kāi)源平臺(tái)上的一個(gè)項(xiàng)目,整個(gè)項(xiàng)目由數(shù)據(jù)庫(kù)連接池、插件框架和SQL解析器組成,它不僅支持高效的連接管理,還集成了 SQL 監(jiān)控、日志輸出和多種擴(kuò)展功能,本文將從 Druid 的基本概念出發(fā),結(jié)合具體樣例,帶你全面掌握 Druid 的配置與使用,需要的朋友可以參考下2025-03-03
java后臺(tái)如何接收get請(qǐng)求傳過(guò)來(lái)的數(shù)組
這篇文章主要介紹了java后臺(tái)如何接收get請(qǐng)求傳過(guò)來(lái)的數(shù)組問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
Java 實(shí)現(xiàn)簡(jiǎn)單靜態(tài)資源Web服務(wù)器的示例
這篇文章主要介紹了Java 實(shí)現(xiàn)簡(jiǎn)單靜態(tài)資源Web服務(wù)器的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11
Reactor 多任務(wù)并發(fā)執(zhí)行且結(jié)果按順序返回第一個(gè)
這篇文章主要介紹了Reactor 多任務(wù)并發(fā)執(zhí)行且結(jié)果按順序返回第一個(gè),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09
SpringCloud?分布式微服務(wù)架構(gòu)操作步驟
SpringCloud是一種微服務(wù)的框架,利用它我們可以去做分布式服務(wù)開(kāi)發(fā),這篇文章主要介紹了SpringCloud?分布式微服務(wù)架構(gòu),需要的朋友可以參考下2022-07-07
Java線程池隊(duì)列PriorityBlockingQueue原理分析
這篇文章主要介紹了Java線程池隊(duì)列PriorityBlockingQueue原理分析,PriorityBlockingQueue隊(duì)列是?JDK1.5?的時(shí)候出來(lái)的一個(gè)阻塞隊(duì)列,但是該隊(duì)列入隊(duì)的時(shí)候是不會(huì)阻塞的,永遠(yuǎn)會(huì)加到隊(duì)尾,需要的朋友可以參考下2023-12-12
maven為MANIFEST.MF文件添加內(nèi)容的方法
這篇文章主要介紹了maven為MANIFEST.MF文件添加內(nèi)容的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
servlet之session工作原理簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了servlet之session工作原理簡(jiǎn)介,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07

