2013-03-18 64 views
0

我輸入飲料時出現問題,例如水,茶,蘇打水Java Vender Loop初學者

此外,我不希望它打印返回,直到用戶輸入飲料選項後,但每次都一直顯示。

import java.util.Scanner; 


    public class Vending 
    { 

    public static void main(String[] args) 
    { 


     System.out.print("Enter a command = "); 

     double balance = 0.0; 
     String a; 


    // scanner input 
    Scanner in = new Scanner(System.in); 

    while (in.hasNext()) 
    { 
     String command = in.nextLine(); 
     if (command.equals("penny")) 
     { 
      balance = balance + 0.01; 
      System.out.println("balance = " + balance); 
     } 
     if (command.equals("nickel")) 
     { 
      balance = balance + 0.05; 
      System.out.println("balance = " + balance); 
     } 
     if (command.equals("dime")) 
      { 
      balance = balance + 0.10; 
      System.out.println("balance = " + balance); 
     } 
     if (command.equals("quarter")) 
      { 
      balance = balance + 0.25; 
      System.out.println("balance = " + balance); 
     } 
     if (command.equals("dollar")) 
      { 
      balance = balance + 1.00; 
      System.out.println("balance = " + balance); 
     } 

     else if (command.equals("break")) 
     { 
      break; 
     } 

     else if (command.equals("water")) 
     { 
      System.out.println("Water"); 
      System.out.println("balance = " + balance - 1.25); 
     } 
     else if (command.equals("tea")) 
     { 
      System.out.println("Tea"); 
      System.out.println("balance = " + balance - 1.50); 
     } 
     else if (command.equals("soda")) 
     { 
      System.out.println("soda"); 
      System.out.println("balance = " + balance - 1.75); 
     } 
     else 
     { 
      System.out.println("return " + balance + " to customer"); 
     } 

     balance++; 
    } 

} 
} 

回答

0

發生這種情況,因爲你沒有開始使用else if立竿見影。你應該在第一次使用if後使用這個。

它從第一個開始,如果,檢查它,然後移動到下一個如果。當你到達檢查dollar的部分時,如果你的dollar是錯誤的,它將只檢查其他人。這是因爲他們是else if

因此,如果您輸入dime例如,它會增加0.10,然後檢查季度,然後美元。然後它進入else if區塊。然後檢查休息時間,水,茶等,然後發現所有的都是錯誤的(你放入一角錢),然後點擊打印天平的else塊。

因此,爲了解決這個問題,您應該使用單獨的方法來檢查貨幣價值或物品。

0

在Java 7中switch語句支持「字符串」值,試圖改變這樣的代碼:

String command = in.nextLine(); 
switch(command) { 
    case "penny": 
      //do something 
      break; 
    case "water": 
      //do something 
      break; 
    case "tea": 
      //do something 
      break; 
    case "soda": 
      //do something 
      break; 
    default: 
      System.out.println("return " + balance + " to customer"); 
} 
balance++; 

希望這有助於您的問題。

+0

是的,我會,如果你使用的是Java 7,但仍然有運算代碼其他錯誤也推薦這個。 – Breavyn 2013-03-18 07:53:58

0

好吧,我可以看到一對夫婦的問題在這裏

  1. 代替in.nextLine(),而使用in.next(),這將讀取第一個輸入「輸入」
  2. 如果您希望在最後打印返回打印輸出,請將其移出循環,以便一旦用戶輸入「break」完成,它將打印出返回位。
  3. 你永遠不會減少項目的價格餘額...而不是平衡++ ;.將其更改爲餘額 - =價格; (餘額=餘額 - 價格)

    while (in.hasNext()) { 
        String command = in.next(); 
           double price = 0.0; 
           ... 
           ... 
        else if (command.equals("water")) { 
         System.out.println("Water"); 
         price = 1.25; 
        } else if (command.equals("tea")) { 
         System.out.println("Tea"); 
         price = 1.50; 
        } else if (command.equals("soda")) { 
         System.out.println("soda"); 
         price =1.75; 
        } 
    
        balance -= price; 
           System.out.println("balance is " + balance); 
    } 
    System.out.println("return " + balance + " to customer");