2015-10-16 184 views
0

我是學習java編程的初學者。基本上,我不能讓我的代碼的最後一部分工作。在向您展示我的代碼之前,我認爲展示結果應該如何是個好主意。該方案的結果應該是:System.out.println不起作用

Please Enter either S(supply) or R(replenish) followed by ID and quantity. 
R  p122. 10 
New Stock-level for p122(Chain) is 58 
S. p124. 20 
New Stock-level for p125(Pedal) is 18 
S. p905. 20 
No part found with ID p905 
.....// enter empty string to terminate 
//Show final stock levels of all Parts 

雖然,我沒有能夠執行的主要計算和一切,我不能打印出最終庫存量的所有部分。我真的不明白爲什麼。 這裏是我的代碼:

import java.util.Scanner; 

public class TestPart { 

public static void main(String[] args) { 

    // Array of 5 Part objects 
    // Part[] part = new Part[5]; 
    Part[] part = new Part[5]; 
    part[0] = new Part("p122", "Chain", 48, 12.5); 
    part[1] = new Part("p123", "Chain Guard", 73, 22.0); 
    part[2] = new Part("p124", "Crank", 400, 11.5); 
    part[3] = new Part("p125", "Pedal", 3, 6.5); 
    part[4] = new Part("p126", "Handlebar", 123, 9.50); 

    ///////// Test Class 2 //////// 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Please Enter either S (supply) or R (replenish) followed by ID and quantity."); 
    while (scanner.hasNext()) { 

     String sOrR = scanner.next(); 
     String inputId = scanner.next(); 
     int amount = scanner.nextInt(); 

     for (int i = 0; i < 5; i++) { 
      String id = part[i].getID(); 
      // Find ID in array 
      if (id.equals(inputId)) { 
       // S or R 
       if (sOrR.equals("R")) { 
        part[i].replenish(amount); 
       } else { 

        part[i].supply(amount); 

       } 
       System.out.println("New Stock-level for " + part[i].getID() + "(" + part[i].getName() + ") is " 
         + part[i].getStockLevel()); 
      } 

     } 
     if ((inputId.equals(part[0].getID()) == false) && (inputId.equals(part[1].getID()) == false) 
       && (inputId.equals(part[2].getID()) == false) && (inputId.equals(part[3].getID()) == false) 
       && (inputId.equals(part[4].getID()) == false)) { 
      System.out.println("No part found with ID " + inputId); 
     } 

    } 
    scanner.close(); 

    System.out.println("Final stock level for all the parts: "); 
    for (int i = 0; i < 5; i++) { 
     System.out.println("Final Stock-level for " + part[i].getID() + "(" + part[i].getName() + ") is " 
       + part[i].getStockLevel()); 
    } 
} 
} 

我的程序完全執行計算的一部分。但它不顯示最終的庫存水平。每當用戶輸入一個空字符串

Please Enter either S(supply) or R(replenish) followed by ID and quantity. 
    R  p122. 10 
    New Stock-level for p122(Chain) is 58 
    S. p124. 20 
    New Stock-level for p125(Pedal) is 18 
    S. p905. 20 
    No part found with ID p905  
+0

爲什麼不調試你的代碼? –

+2

定義「不工作」 –

+0

程序計算並打印輸出例如:請輸入S(供應)或R(補充),然後輸入ID和數量。 R p122。 10 p122(Chain)的新庫存水平是58 S. p124。 20 p125(踏板)的新庫存水平是18 S. p905。 20 未找到與ID p905 –

回答

0

你放棄狀況(即scanner.hasNext())將不會退出while循環。我不知道你是否已經注意到,但是隻要用戶點擊返回鍵,什麼都不會發生,因爲Scanner.next不會僅在返回時觸發。雖然知道它存儲你的輸入。這意味着一旦您輸入「有效」輸入(如abc),Scanner將爲您提供用戶在有效輸入之前剛輸入的所有內容。只是一個小例子來說明我的意思:

Scanner scanner = new Scanner(System.in); 
while(scanner.hasNext()) { 
    System.out.println("\"" + scanner.next() + "\""); 
} 
scanner.close(); 
System.out.println("finished"); 

所以,如果你想用戶輸入一個空行後中止程序,這是不可能的java.util.Scanner.hasNext。我建議你另一個字符添加到您的「S或R」選項,允許用戶退出程序是這樣的:

if(sOrR.equals("E")) break; 

你應該這樣直接放在背後String sOrR = scanner.next();

+0

謝謝,你其實回答了我的問題。但是,我不允許添加另一個參數來終止while循環。我只能使用空字符串... –

+0

@TamLam然後我會將你的答案標記爲https://stackoverflow.com/questions/7320315/how-to-test-for-blank-line-with-java -掃描器 – mezzodrinker