2015-02-23 131 views
-1

我想在我的二维数组中找到最长的一系列水平的O,并打印出最长的路径。我没有看到我的逻辑错误,我一直在阅读,但没有看到我的错误。我一直呆在这里约2天。我在想,也许我的发现最大长度声明有什么问题?第58行和第31行出现越界错误。对于我在做错的任何建议都将非常感激。二维数组查找char元素(s)

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

你在这里看到任何行号吗?请说明这些情况到底发生了什么。 – tnw 2015-02-23 21:02:11

+0

函数调用:horizo​​ntalPath(); 31 – 2015-02-23 21:05:31

+0

第二条if语句:if(horizo​​ntalPath 2015-02-23 21:06:10

回答

0

我猜你有你的代码抵消了行号,你的问题是线47在上面的代码之前的一些进口:

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

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

另请注意,您并未实际计算任何事物的最大值,只需将maxHorizo​​ntalCount设置为[i] [j]处的值即可。要计算最大值,您应该执行如下操作:

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

或当然使用Math.max()。