2015-02-23 115 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()。