Days11二维数组
二维数组的定义
-
先声明,再初始化:跟一维数组一样,会将里面的所有元素初始化为零值
-
int[][] nums; nums = new int[][];
-
声明的同时进行初始化
-
int[][] nums = new int[5][3]; // 注意:如果第二维不给长度,相当于是一个可变的二维数组
-
声明并赋值
int[][] nums = new int[][]{{}, {}, {}}
-
声明并赋值
-
int[][] nums = {{}, {}};
注意点:// int[] ns[] = new int[][];也是声明ns为一个二维数组
二维数组的案例
俄罗斯方块
逻辑分析
代码实现
package com.james;
import java.util.Random;
public class TestRussianShape02 {
public static void main(String[] args) {
printShape(getRandomShape());
}
/**
* 在控制台打印随机生成的表示二维数组的形状
*
* @param shapes 表示俄罗斯方块形状的二维数组
*/
public static void printShape(int[][] shapes) {
/**
* 在4*4的区域来绘制俄罗斯方块的形状
*/
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
boolean flag = false;
// 判断给定的点的坐标是否是x=i,y=j
for (int k = 0; k < 4; k++) {
if (shapes[k][0] == i && shapes[k][1] == j) {
flag = true;
break;
}
}
if (flag)
System.out.print("■ ");
else
System.out.print("□ ");
}
System.out.println();
}
}
/**
* 借助随机数来随机生成一个表示俄罗斯方块形状的二维数组
*
* @return 得到一个随机的表示俄罗斯方块形状的二维数组
*/
public static int[][] getRandomShape() {
Random r = new Random();
int shape = r.nextInt(3);
int type = r.nextInt(4);
int[][] shapes = new int[4][2];
switch (shape) {
case 0: // 方块
shapes = new int[][] { { 0, 0 }, { 1, 0 }, { 0, 1 }, { 1, 1 } };
break;
case 1: // 长条
switch (type) {
case 0:
case 2: // 横条
shapes = new int[][] { { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 } };
break;
default: // 数条
shapes = new int[][] { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 } };
break;
}
default: // T
switch (type) {
case 0: // T
shapes = new int[][] { { 0, 0 }, { 0, 1 }, { 0, 2 }, { 1, 1 } };
break;
case 1: // -|
shapes = new int[][] { { 0, 1 }, { 1, 0 }, { 1, 1 }, { 2, 1 } };
break;
case 2: // 土
shapes = new int[][] { { 0, 1 }, { 1, 0 }, { 1, 1 }, { 1, 2 } };
break;
default:// |-
shapes = new int[][] { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 1, 1 } };
break;
}
break;
}
return shapes;
}
}