我想编写一个程序,读取格式为txt的正整数矩阵(矩阵可以是任意大小)。 (我从控制台读取矩阵)。 该程序在矩阵中寻找一个位置,以便如果骑士位于该位置,所有可能的移动将使骑士落在具有相同值的元素上,并且必须具有至少2个选项。程序打印结果。例如,黑色的地方是骑士可以移动到的地方。
这是我写的代码。问题是我得到了:"线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:-1 在Knights.main(Knights.java:23)",我知道第一行有问题(矩阵的开头没有向后的值)但是我不知道我怎么能知道修理它。
public static void main (String[] args) {
String size = StdIn.readLine();
int counter = 0;
int matrixSize = Integer.parseInt(size);
int [][] matrix = new int [matrixSize+1][matrixSize+1];
for (int i=0; i <= matrixSize-1; i++) {
for (int j=0; j <= matrixSize-1; j++) {
if ((matrix[i][j]) > 0)
matrix[i][j] = StdIn.readInt();
}
}
for (int k=0; k <= matrixSize-2; k++) {
for (int l=0; l <= matrixSize-2; l++) {
if (matrix[k-1][l+2] == matrix[k+1][l+2]) {
counter +=1;
StdOut.println(counter); }
else if (matrix[k-1][l+2] == matrix[k+1][l-2]) {
counter +=1;
StdOut.println(counter); }
if (counter>=2)
StdOut.println("location "+ matrix[k][l] + "is surrounded by the number " +matrix[k+1][l-2]);
}
}
if (counter < 2)
StdOut.println("no surrender by any number");
}
}
答案 0 :(得分:0)
我会在这里添加一个额外的测试来检查k-1
是否大于0。
由于&&
是short-circuit operator,如果第一个表达式为false且不能抛出异常,则不会测试第二个表达式。
if (k - 1 > 0 && matrix[k - 1][l + 2] == matrix[k + 1][l + 2]) {
counter += 1;
StdOut.println(counter);
} else if (k - 1 > 0 && matrix[k - 1][l + 2] == matrix[k + 1][l - 2]) {
counter += 1;
StdOut.println(counter);
}