【问题标题】:2D array trouble finding char element(s)二维数组查找 char 元素时遇到问题
【发布时间】:2015-04-25 08:07:23
【问题描述】:

我试图在我的二维数组中找到最长的一系列水平 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);
 }

}

【问题讨论】:

  • 您在这里看到任何行号吗?请指出这些具体发生在哪里。
  • 函数调用:horizo​​ntalPath(); 31
  • 第二个if语句:if(horizo​​ntalPath
  • 因为在if(horizontalPath &lt; mazeValue[i][j]) 行上,您在第二个for 循环之外,所以j = mazeValue[i].length; 在数组之外
  • 看看我是怎么做到的,但是计数工作不正常,所以我只是尝试将它移到第一个 if 语句之外。知道为什么最长行的长度一直为 0 吗??

标签: java arrays for-loop char


【解决方案1】:

我猜你的代码之前有一些导入偏移了行号,你的问题在上面代码的第 47 行:

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

这个块在 j 上的 for 循环的之外。这意味着当控制到达这里时,j 将等于 n,从而导致索引超出范围。

还请注意,您实际上并没有计算任何东西的最大值,只是将 maxHorizo​​ntalCount 设置为 [i][j] 处的值。要计算最大值,您应该执行类似的操作

maxHorizontalCount = maxHorizontalCount > mazeValue[i][j] ? maxHorizontalCount : mazeValue[i][j];

当然也可以使用 Math.max()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2014-01-25
    • 1970-01-01
    相关资源
    最近更新 更多