0

水、お茶、ソーダなどの飲み物を入力すると、ループに問題が発生します。

また、ユーザーが飲み物の選択を入力するまで返品を印刷したくありませんが、それも毎回表示され続けます。

    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++;
    }

 }
}
4

3 に答える 3

0

else ifこれは、すぐに使用を開始しなかったために発生しています。を最初に使用した後に、これを使用する必要がありifます。

最初のifから始まり、チェックし、次のifに移ります。チェックする部分に到達すると、falsedollarの場合にのみ他の部分をチェックします。dollarこれは、彼らがelse if.

dimeたとえば、入力すると、0.10 が追加され、四半期、ドルがチェックされます。そしてelse ifブロックに入ります。次に、休憩、水、お茶などをチェックし、すべてが偽であることがわかります(10セント硬貨を入れます)。次に、elseブロックにヒットして残高を出力します。

したがって、これを全体的に修正するには、別の方法を使用して金額またはアイテムを確認する必要があります。

于 2013-03-18T07:34:35.500 に答える
0

Java 7 の switch ステートメントでは、"String" 値がサポートされているため、次のようにコードを変更してみてください。

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++;

これがあなたの問題に役立つことを願っています。

于 2013-03-18T07:49:08.723 に答える
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");
    
于 2013-03-18T08:20:43.133 に答える