1

私のコードは、自動販売機に似たものをシミュレートすることになっています。しかし、オプションの 1 つではない価格を入力すると問題が発生します。たとえば、0.82など、プログラムは引き続き実行されます。オプションの 1 つだけを受け入れるようにするにはどうすればよいですか?

import java.util.Scanner;

public class VendingMachine 
{
    public static void main (String[] args)
    {
        double price;
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Choose your price. Your options are: ");
        double i;
        for (i=0.25; i<=1.25; i+=0.25)
             System.out.printf("$%.2f\n", i );

        System.out.println("Enter your selection now: ");
        price=keyboard.nextDouble();
        System.out.printf("You chose the $%.2f option. ",price);    
        double deposit;

        if (price<=1.00) {
            System.out.println("Please insert 1 dollar. *This machine only accepts Loonies*");
            deposit=1;
        } else {
            System.out.println("Please insert 2 dollars.*This machine only accepts Loonies*");
            deposit=2;
        }

        System.out.println("Please press 'Enter' to simulate inserting money. ");
        new Scanner(System.in).nextLine();

        double change;
        change = deposit-price;
        System.out.printf("Your change is $%.2f\n",change);
    }
}

私はこのようなことを試みましたが、うまくいきません。これを行う最善の方法は何ですか。

if (price==i)
    System.out.println("You entered " + price);
else {
    System.out.println("Invalide choice. Please try again.")
    System.exit(0);
}

読みやすいと思う場合は、こちらの画像をご覧ください。

4

4 に答える 4

3

ある種のループ ( whiledo-whilefor ) を使用できます。これは、条件が満たされる (または満たされない) までコードを実行し続けます。

次に例を示します。

do {
   code line 1;
   code line 2;
   code line 3;
   ...
} while(yourCondition);

yourConditionが満たされている場合 ( ) yourCondition == true、コードは ( ~ の間のコード ブロックを実行する) に戻り、code line 1条件が満たされない場合 ( ) に停止します。は、 など、真/偽の結果 ( )を返す任意の式にすることができます。dowhileyourCondition == falseyourConditionboolean2+2==4

が満たされない限りループを続けたい場合は、式の前yourConditionに a を追加できます。これにより、 like this!の反対が評価されます。boolean(!yourCondition)

これがどのように機能するかを理解していれば、コードに簡単に適用できます。

于 2013-06-12T23:36:40.660 に答える
2

ユーザーに表示された価格のみを入力してもらいたい場合は、次のことをお勧めします。正確な希望に合わせて編集する必要があります。

    //given you an open scanner
    boolean isCorrectPrice = false;

    System.out.println("enter price");
    price = in.nextDouble();
    while(!isCorrectPrice)
    {
       if(price%0.25==0 && price<=1.25 && price>0)
       {
          System.out.println("you entered "+price);
          IsCorrectPrice = true;
          continue;
       }
       System.out.println("incorrect price, re-enter ");
       price = in.nextDouble();
    }
   //your code after user enters correct price

それはチェックを行います。価格が変更された場合、0.25または条件価格チェックで割り切れる最大価格を変更するだけです。

于 2013-06-13T01:30:27.350 に答える
0

お金を扱うには、(double ではなく) BigDecimal を使用します。その正確な -- double ではありません。 http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html

ユーザー入力を取得する関数を作成します。ユーザーが許可された値を入力するまで返されません。

于 2013-06-12T23:41:18.223 に答える