2012-02-12 101 views
0

我遇到了以下部分代碼問題。 當輸入「nn」時,我得到無效的代碼。 當輸入有效的代碼時,我得到無效的代碼,但是這隻發生一次。程序似乎不按預期工作。請協助。根據ArrayList驗證用戶輸入

System.out.println("ENTER CODE (nn to Stop) : "); 
    ArrayList<Product> list = new ArrayList<Product>(); 
    . 
    . 
    . 
    . 


    ArrayList<Code> codeList = new ArrayList<Code>(); 


    for (Product product : list) { 
     System.out.print("CODE : "); 
     String pcode = scan.next(); 
     if (pcode.equalsIgnoreCase("nn")) { 
      break; 
     } 

     if (!(code.equalsIgnoreCase(product.getCode()))) { 
      System.out.println("Invalid code, please enter valid code."); 
      System.out.print("CODE : "); 
      pcode = scan.next(); 

     } 

     System.out.print("QUANTITY : "); 
     int quan = scan.nextInt(); 
     while (quan > 20) { 
      System.out.println("Purchase of more than 20 items are not allowed, please enter lower amount."); 
      System.out.print("QUANTITY : "); 
      quan = scan.nextInt(); 
     } 
     codeList.add(new Code(pcode, quan)); 
    } 

回答

1

你想continue而不是break

此外,您只能在循環內調用code = scan.next()一次;否則你會跳過一些項目。

String code = scan.next(); 
boolean match = false; 
for (Product product : list) { 
    if (code.equalsIgnoreCase(product.getCode())) { 
     match = true; 
     break; 
    } 
} 
// now only if match is false do you have an invalid product code. 

更新:

我仍然不能得到這個工作。我試圖做的是測試用戶 輸入以確保產品代碼存在,如果不提示輸入的 產品代碼無效並且要求輸入正確的代碼。當輸入「nn」時,我還需要 有條件停止訂單。我試過 while循環,do-while循環等我似乎無法得到它的權利。請幫助 。我的問題是編寫多個條件的代碼。當 一個正常工作,另一個不正確。

while (true) { 
    final String code = scan.next(); 
    if (isExitCode(code)) { 
     break; 
    } 
    if (!isValidCode(code)) { 
     System.out.println("Invalid code, please enter valid code."); 
     continue; 
    } 
    int quantity = -1; 
    while (true) { 
     quantity = scan.nextInt(); 
     if (!isValidQuantity(quantity)) { 
      System.out.println("bad quantity"); 
      continue; 
     } 
     break; 
    } 
    // if you've got here, you have a valid code and a valid 
    // quantity; deal with it as you see fit. 
} 

現在你只需要編寫方法isExitCode(),isValidCode(),和isValidQuantity()。

+0

我確實嘗試'繼續',但是當輸入「nn」時,我需要完全從循環中斷開。我從if塊中刪除了'code = scan.next(),但是結果相同。 – xiphias 2012-02-12 23:30:07

+0

我是一個noob,我正在努力...... – xiphias 2012-02-12 23:37:27

+0

因此,當您循環使用產品時,您目前使用的產品是唯一可以接受的產品;您將輸入的代碼與當前產品的代碼進行比較,否則將其視爲無效。那是你要的嗎? – 2012-02-13 01:04:38