一、介绍
应用场景:比如我们要开发一个五子棋游戏,期盼就是需要用二维数组来表示。即一维数组的每一个元素也是数组。
例子:请用二维数组输出如下图形: 000000 001000 020300 000000
package com.hspedu.array;
public class TwoDimensionalArray {
public static void main(String[] args) {
/*
请用二维数组输出如下图形:
000000
001000
020300
000000
*/
/*
什么是二维数组?
1.从定义形式上看 int[][]
2.原来的一维数组的每个元素都是一堆数组,就构成二维数组。
因此如果要得到每个一维数组的值,还需要再次遍历
3.如果要访问第(i+1)个一维数组的j+1个值,用 arr[i][j]
*/
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}};
//输出二维图形
//1.arr[i].length得到对应的每个一维数组的长度
for (int i = 0; i < arr.length; i++){ //这里的arr.length是4,代表的是一维数组的长度
for (int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j] + " "); //输出了一维数组
}
System.out.println();
}
}
}
二、定义
1、动态初始化1
- 语法:类型[][] 数组名 = new 类型[二维数组大小][每个一维数组大小]
- 比如:int a[][] = new int[2][3]
重点:二维数组在内存中的存在形式。(真正存放数据的地方是最右边的0x0022和0x0033)
2、动态初始化2
- 先声明:类型 数组名[][];
- 再定义(开辟空间):数组名 = new 类型[大小][大小]
- 赋值(有默认值,比如int 类型的就是0)
public class TwoDimensionalArray02 {
public static void main(String[] args) {
int arr[][]; //声明二维数组
arr = new int[2][3]; //再开辟空间
}
}
3、动态初始化--->列数不确定
下面是实现的代码:
package com.hspedu.array;
/*
动态创建下面的数组,并输出
i = 0: 1
i = 1: 2 2
i = 2: 3 3 3
*/
public class TwoDimensioanlArray03 {
public static void main(String[] args) {
int[][] arr = new int[3][]; //只是创建了二维数组,一共有3个一维数组,但是每个一维数组还没有开辟数据空间
for (int i = 0; i < arr.length; i++){ //遍历arr每个一维数组
//给每一个一维数组开空间
arr[i] = new int[i+1];
//遍历一维数组,并给一维数组的每个元素赋值
for (int j = 0; j < arr[i].length; j++){
arr[i][j] = i+1;
}
}
//遍历arr输出
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..}}
三、练习题
1、要求:int arr[][] = {{4,6},{1,4,5,7},{-2}}; //遍历该二维数组,并得到和
package com.hspedu.array;
public class TwoDimensionalArray05 {
public static void main(String[] args) {
//要求:int arr[][] = {{4,6},{1,4,5,7},{-2}};
// 遍历该二维数组,并得到和
int sum = 0;
int arr[][] = {{4,6},{1,4,5,7},{-2}};
for (int i = 0; i < arr.length; i++){
for (int j = 0; j < arr[i].length; j++){
sum = sum + arr[i][j];
}
}
System.out.println("sum= " + sum);
}
}
四、杨辉三角
package com.hspedu.array;
/*
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]
*/
public class YangHui {
public static void main(String[] args) {
int[][] yangHui = new int[6][];
for (int i = 0; i < yangHui.length; i++){ //遍历yangHui的每个元素
//给每个一维数组开辟空间
yangHui[i] = new int[i+1];
//给每一个一维数组赋值
for (int j = 0; j < yangHui[i].length; j++){
if (j == 0 || j == yangHui[i].length-1){
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();
}
}
}