2013-08-19 101 views
0

我有對象的數組看起來像這樣:打印陣列出界的java

1:[沃爾沃,200],[美洲虎,900]
2:[寶馬,300]
3 :[斯柯達,100], [(無輸入)],[(無輸入)]


這是我的方法與值只打印區域(有一些格式化內,但它不是問題)。得到一個出界的錯誤...我需要做什麼?謝謝!

 public static void printMat(Car[][] carMat){ 
     int row = 0; 
     int column = 0; 
     while ((carMat[row][column] != null)){ 
      System.out.printf("(%-8s : %,9d)", carMat[row][column].getName(), carMat[row][column].getPrice()); 
      if (column == carMat[row].length - 1){ 
       System.out.print("\n"); 
       row++; 
       column = 0; 
      } else { 
       column++; 
      } 
     } 
    } 

回答

1

您檢查了是否要離開當前行的結尾,這很好,但是您沒有檢查是否已經用盡了行。

row++之後,添加一個檢查,看看row已經結束了carMat陣列。

if (row >= carMat.length) 
    break; 

這假定您至少有一行。您甚至可以在輸入while循環之前檢查是否至少有一行。

0
for(int row = 0; row < car.length; row++){ 
    for(int column = 0; column < car[row].length; column++){ 
     //print statement 
     if(column == car[row].length - 1){ 
      System.out.println(); 
     } 
    } 
} 

此實現使用一對for環,外一個只關心行中的陣列的長度,內一個只關心的行的長度。

但是,從性能的角度來看,我確實會發現您的單循環實現很有趣。