我正在做的是创建一个具有一定行数和列数的矩阵,然后用 0 到 9 范围内的随机整数填充该表。我现在要做的是确定是否存在连续的偶数在表中相邻重复四次的整数。例如,这样的事情:
2 5 8 7 1
3 2 9 4 7
5 1 2 0 3
8 0 1 2 7
在该表中,两个连续出现,从第一个位置斜向出现。也可以是这样的:
9 5 3 7 0
2 5 7 3 1
8 5 0 2 9
4 5 1 7 5
在此表中,从第二个位置开始垂直向下显示五个。
我创建了二维数组,如下所示:
public static void main(String[] args) {
int[][] randomTable = new int[5][5];
for (int row = 0; row < randomTable.length; row++) {
for (int column = 0; column < randomTable[row].length; column++) {
randomTable[row][column] = (int)(Math.random() * 10 + 0);
System.out.print(randomTable[row][column] + " ");
}
System.out.println();
}
}
测试数组时,如果数组包含如上所述的四个连续偶数整数,我需要它返回 true。我知道我需要创建一个循环,但我该怎么做?
最佳答案
我可能会考虑采用递归方法来解决这个问题。
您知道,四个“匹配”可以是上、下、左、右以及对角两个方向。这很大程度上效率低下,但我首先想到的是:
对randomTable[中的每个
int
调用一个方法check(int value, int j, int i, int deltaJ, int deltaI, int count);
][]
循环遍历整个随机数数组:
for (int i = 0; i < randomTable.length; i++) {
for (int j = 0; j < randomTable[i].length; j++) {
boolean a = check(randomTable[i][j], j, i, 1, 0, 1); // move right
System.out.print(a ? "The number " + randomTable[i][j] + "is in a line!" : );
}
}
然后,递归循环可能如下所示:
boolean check(int value, int j, int i, int deltaJ, int deltaI, int count) {
if (count == 4) {
return true;
}
try {
if (randomTable[i + deltaI][j + deltaJ] == value) {
return check(randomTable[i + deltaI][j + deltaJ], j + deltaJ, i + deltaI, deltaJ, deltaI, count + 1);
} else {
return false;
}
} catch (ArrayIndexOutOfBoundsException e) {
return false;
}
}
关于java - 我将如何创建这个检查数组中整数的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27155840/