多维数组-二维数组
-
快速入门
请用二位数组输出如下图形:
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
public class TwoDimensionalArray01{
public static void main(String[] args) {
/*请用二位数组输出如下图形:
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
*/
//二维就是两个[][],可以看做是特殊的一维数组,原来一维数组的每个元素都是一个一维数组
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++) {//行,对应的就是二维数组的长度
for (int j = 0; j < arr[i].length; j++) {//列,arr[i].length得到的就是每行的元素个数
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
//如果我们要访问第(i+1)行的第(j+1)列的值:arr[i][j]
//访问第二行第三列的元素
System.out.println(arr[1][2]);
}
}
二维数组的使用
-
使用方式1:动态初始化
-
语法:
类型[][] 数组名 = new 类型[大小][大小]
-
案例:
int[][] arr = new int[2][3];//两行三列
-
二维数组在内存的存在形式
-
-
使用方式2:动态初始化
-
语法
先声明:
类型 数组名[][];
再定义:
数组名 = new 类型[大小][大小]
-
案例:
int arr[][];//先声明 arr = new int[2][3];//再开辟空间
-
-
使用方式3:列数不确定
-
需求:
i/j j = 0 j = 2 j = 3 i = 0 1 i = 1 2 2 i = 2 3 3 3 -
代码
public class TwoDimensionalArray02{ public static void main(String[] args) { /* | i = 0 | 1 | | | | i = 1 | 2 | 2 | | | i = 2 | 3 | 3 | 3 | */ int[][] arr = new int[3][];//创建二维数组,一共有三个一维数组,但是每个一维数组还没有开数据空间 //给一维数组的一维数组开辟空间并赋值 for (int i =0; i < arr.length; i++) { //给每个一维数组(arr[i])开空间(new)。如果没有new,那么arr[i]就是null arr[i] = new int[i + 1];//i+1是因为大小是从1开始 //给每个一维数组的一维数组赋值 for (int j = 0; j < arr[i].length; j++) { arr[i][j] = i + 1; } } //打印二维数组 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } } }
-
-
使用方式4:静态初始化
-
语法
类型 数组名[][] = {{值1, 值2..}, {值1, 值2..}, {值1, 值2..}};
-
案例
int[][] arr = {{1, 1, 1}, {2, 2}, {3}}; //定义了一个二维数组 //arr有三个元素(每个元素都是一个一维数组) //第一个一维数组有3个元素,第二个有2个,第三个有1个
-
二维数组使用细节和注意事项
-
一维数组的声明方式有:
int[] x 或者 int x[];
-
二维数组的声明当时有
int[][] y 或者 int[] y[] 或者 int y[][]
-
二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。
练习
-
int arr[][] = {{4, 6}, {1, 4, 5, 7}, {-2}};
遍历该数组,并得到和 -
使用二维数组打印一个10行的杨辉三角
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
public class YangHui{ public static void main(String[] args) { /* 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 */ /* 提示: 1. 第一行有1个元素,第n行有n个元素 2. 每一行的第一个和最后一个元素都是1 3. 从第三行开始,对于非第一个元素和最后一个元素的值: arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; */ int[][] YangHui = new int[10][];//动态之前先声明 for (int i = 0; i < YangHui.length; i++) { //new新空间 YangHui[i] = new int[i + 1]; //赋值 for (int j = 0; j < YangHui[i].length; j++) { //第一个和最后一个元素的值是1 if (j == 0 || j == YangHui[i].length - 1) {//下标是从0开始 YangHui[i][j] = 1; }else{ YangHui[i][j] = YangHui[i - 1][j - 1] + YangHui[i - 1][j]; } } } //打印 for (int i = 0; i < YangHui.length; i++) { for (int j = 0; j < YangHui[i].length; j++) { System.out.print(YangHui[i][j] + " "); } System.out.println(); } } }
-
声明:int[] x, y[]; 以下选项允许通过编译的是();
a. x[0] = y; b. y[0] = x; c. y[0][0] = x; d. x[0][0] = y; e. y[0][0] = x[0]; f. x = y;
选be.x是一维数组,y是二维数组。x[]是int,y[]是一维数组。y[][]是int a. x[0] = y; //int <- 二维数组 b. y[0] = x; //一维数组 <- 一维数组 c. y[0][0] = x; //int <- 一维数组 d. x[0][0] = y; //x没有俩括号,直接错 e. y[0][0] = x[0]; //int <- int f. x = y; //一维数组 <- 二维数组
选be.x是一维数组,y是二维数组。x[]是int,y[]是一维数组。y[][]是int a. x[0] = y; //int <- 二维数组 b. y[0] = x; //一维数组 <- 一维数组 c. y[0][0] = x; //int <- 一维数组 d. x[0][0] = y; //x没有俩括号,直接错 e. y[0][0] = x[0]; //int <- int f. x = y; //一维数组 <- 二维数组