2012-04-17 61 views
0

我必須搜索一個凱迪拉克對象數組,以顯示某個模型的結果,比如說「Escalade」,並且我無法確定我的代碼需要放在哪裏爲了在控制檯屏幕上打印結果。當我嘗試打印我現在擁有的內容時,我一直陷在循環中。關於我的程序的其他一切工作正常,我只需要能夠在控制檯屏幕上顯示多個結果。循環搜索一個數組,打印多個結果

這裏是我的代碼:

while(response != null) 
    { 
     if(response.length() > 0) 
     { 
     count = 0; 
     found = false; 
     while(count < data.length && data[count] != null && !found) 
     { 
      item = data[count].getModel(); 
      if(item.equalsIgnoreCase(response)) 
      { 

      found = true; 
      } 
      else{ 
      count++; 
      } 
      message = "Model: " + data[count].getModel() + "\n" + 
        "Stock Number: " + data[count].getStockNum() + "\n" + 
        "Color   : " + data[count].getColor() + "\n" + 
        "Price : " + data[count].getPrice(); 
      System.out.print(message); 
     } 

     if(!found) 
      message = "Model not found in array."; 
    } 
    } 
    response = JOptionPane.showInputDialog(prompt); 
    } 

而且,搜索的第二部分是用來顯示車是在用戶的輸入$ 3000的搜索結果,並肯定會升值對一些指導因爲這兩種類型的搜索相對相似。

回答

1

您沒有顯示所有代碼,但是如果處於無限循環狀態,請查看循環條件。看起來您正在查看response是否爲空,但response永遠不會在循環內部分配,所以一旦進入,您將被卡住。

而且,count應該隨着時間增加,因爲您正在循環中檢查它。當找到一個人時,你不會增加它,因此循環不會中斷。

我建議再次從頭開始編寫這段代碼。我認爲你可以簡化你的條件,使自己(和分級)更容易理解。

我會幫你開始。

do { 
    response = JOptionPane.showInputDialog(prompt); 
    for (int i=0; i < data.length; i++) { 
     // do stuff with data[i] here 
    } 
} while(response != null); 

我認爲do-while循環對於檢查用戶輸入是有意義的。如果循環遍歷元素,則for循環是有意義的。從這裏你可以檢查用戶輸入,不需要計算長度,因爲equalsIgnoreCase()將爲你處理字符串比較。

0

如果匹配或找到模型,您的內部循環永遠不會結束。因此,在這種情況下,循環變得無限。您需要增加內部循環中的計數。因此,此增量應該獨立發生,並且您可以安全地完成內部循環。但是當你找到一個模型並且在這之後顯示它的信息時,你可以輕鬆地做一件事來打破內部循環。

while(count < data.length && data[count] != null && !found) 
     { 
      item = data[count].getModel(); 
      if(item.equalsIgnoreCase(response)) 
      { 

      found = true; 
      break; 
      } 
      else{ 
      count++; 
      } 
      message = "Model: " + data[count].getModel() + "\n" + 
        "Stock Number: " + data[count].getStockNum() + "\n" + 
        "Color   : " + data[count].getColor() + "\n" + 
        "Price : " + data[count].getPrice(); 
      System.out.print(message); 
     } 

希望這會幫助你。