检查索引超出范围的原因

时间:2015-11-21 15:27:44

标签: java

我想编写一个程序,读取格式为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");
    }
  }

1 个答案:

答案 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);
}