2015-02-24 44 views
1

我的作業的一部分是創建一個程序,要求用戶輸入範圍從1到1000的項目價格。如果用戶輸入的價格不在該範圍內,則程序循環回詢問相同料號的價格(料品號範圍從1-10)。如果輸入價格在該範圍內,則程序增加項目編號。並要求用戶輸入該項目的價格。這是我做到的。但是隻有第1項行爲正確。請advise.Thanks當用戶輸入錯誤時循環,輸入正確時遞增

boolean priceinrange = false;  

do { 
     System.out.println("Please enter the price of item " + x + ":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 

    } 
    while (!priceinrange); 

    do { 

     System.out.println("Please enter the price of item:"+ (x+=1) + ":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 

    } 

    while (!priceinrange); 

    do { 
     System.out.println("Please enter the price of item"+ (x+=1) + ":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 
     else 
      System.out.println ("Please enter the price of item" + x +  ":"); 

    } 
    while (!priceinrange); 

    do { 
     System.out.println("Please enter the price of item " + (x+=1) + ":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 
     else 
      System.out.println ("Please enter the price of item" + x + ":"); 
    } 
    while (!priceinrange); 

    do { 
     System.out.println("Please enter the price of item" + (x+=1)+":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 
     else 
      System.out.println ("Please enter the price of item" + x + ":"); 
    } 
    while (!priceinrange); 

    do { 
     System.out.println("Please enter the price of item" + (x+=1)+ ":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 
     else 
      System.out.println ("Please enter the price of item :"); 
    } 
    while (!priceinrange); 

    do { 
     System.out.println("Please enter the price of item" + (x+=1) + ":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 
     else 
      System.out.println ("Please enter the price of item :"); 
    } 
    while (!priceinrange); 

    do { 
     System.out.println("Please enter the price of item" + (x+=1)+ ":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 
     else 
      System.out.println ("Please enter the price of item :"); 
    } 
    while (!priceinrange); 

    do { 
     System.out.println("Please enter the price of item" + (x+=1) +":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 
     else 
      System.out.println ("Please enter the price of item :"); 
    } 
    while (!priceinrange); 

    do { 
     System.out.println("Please enter the price of item" +(x+=1)+ ":"); 
     price = kb.nextDouble(); 
     if (price>1 && price<1000) 
      priceinrange= true; 
     else 
      System.out.println ("Please enter the price of item :"); 
    } 

    while (!priceinrange); 
+0

似乎可以爲我工作... – MadProgrammer 2015-02-24 03:46:27

+0

重新命名。循環和迭代意味着相同的事情 – CandiedOrange 2015-02-24 03:46:49

+0

您可以通過將提示的「do-while」移動到可調用的方法來降低複雜性。然後,您可以通過一個簡單的「for-loop」來提示您想要的物品數量... – MadProgrammer 2015-02-24 03:49:45

回答

0

您需要刪除所有的複製和粘貼代碼。額外的代碼只會讓這個更難。

真正的竅門是當輸入錯誤和正確時循環。您只有在閱讀了10個有效價格後纔會停止循環。你不關心它循環結束了多少次。你關心你有10個價格。

如果你這樣想,那麼只需要一個循環。 A do while (x <= 10)if (price > 1 && price < 1000) { x += 1;}將爲您帶來一個美好的世界。

你應該能夠用少於25行的代碼解決這個問題。我解決了它,根本不使用priceinrange布爾值。

如果這還不足以讓我知道。

+0

我做到了這一點,我能夠用少於20行的線有效地解決這部分。大幫忙!非常感謝! – 1110m 2015-02-24 19:25:59

0

您需要設置priceinrange回到虛假每個do { } while()之前。否則,即使您輸入了無效的價格,它仍然是true(來自「之前」)。

另一種方法是始終將其設置爲:priceinrange = (price > 1 && price < 1000)而不是僅當滿足條件時將priceinrange設置爲true

+0

儘管用10個循環解決這個問題肯定是可行的,但這真的應該鼓勵嗎? – CandiedOrange 2015-02-24 04:46:02

+0

不是,但我指出的實際編碼錯誤是回答原始問題的簡單邏輯錯誤。當然,我還沒有解決代碼中的其他問題。 – John3136 2015-02-24 04:58:03