二维数组故障查找char元素

时间:2015-02-23 20:57:30

标签: java arrays for-loop char

我试图在我的2d阵列中找到最长的水平O系列,然后打印出最长的路径。我没有看到我的逻辑错误,我继续读这个但是没有看到我的错误。我被困在这里大约2天。我想也许我的查找最大长度声明有问题吗?我在第58和31行遇到了一个出界错误。对我所做错的任何建议都会非常感激。

public class game {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    Scanner kbd = new Scanner(System.in);
    System.out.println("ENTER A SINGLE INTEGER: ");
    int n = kbd.nextInt();
    char[][] mazeValue = new char[n][n];
    System.out.println("ENTER A PATH: ");
    for(int i = 0; i < mazeValue.length; i++ ){
        for(int j = 0; j< mazeValue[i].length; j++){
            mazeValue[i][j]= kbd.next().charAt(0);
        }
    }
    printMaze(mazeValue);
    horizontalPath(mazeValue);
}
public static void printMaze(char mazeValue[][])
{
    System.out.println("MAZE");
    for(int i = 0; i < mazeValue.length; i ++)
 {
        for (int j = 0; j < mazeValue[i].length; j++)
        {
        System.out.printf("%4c",mazeValue[i][j]);
        }
     System.out.printf("\n");
   }
 }
 public static void horizontalPath(char mazeValue[][])
  {
   int horizontalPath=0;
   int maxHorizontalCount=0;
   int i;
   int j;
   for(i= 0; i<mazeValue.length; i++){
       for(j = 0; j<mazeValue[i].length; j++){
       if(mazeValue[i][j]== 'o'){
           horizontalPath = horizontalPath + mazeValue[i][j];
       }

     }
     if(horizontalPath < mazeValue[i][j])
         maxHorizontalCount = mazeValue[i][j];
   }
   System.out.printf("Longest horizontal path row %d length %d",i,maxHorizontalCount);
 }

}

1 个答案:

答案 0 :(得分:0)

我猜您在代码之前有一些导入会抵消行号,而您的问题在上面代码的第47行:

if(horizontalPath < mazeValue[i][j])
     maxHorizontalCount = mazeValue[i][j];

此块在你的for循环中 。这意味着通过时间控制到达此处,j将等于n,从而导致索引超出范围。

另请注意,您实际上并未计算任何内容的最大值,只需将maxHorizo​​ntalCount设置为[i] [j]处的值即可。要计算最大值,您应该执行类似

的操作
maxHorizontalCount = maxHorizontalCount > mazeValue[i][j] ? maxHorizontalCount : mazeValue[i][j];

或者当然使用Math.max()。