我的代码应该模拟类似于自动售货机的东西。但是当我输入的价格不是我的选择之一时会出现问题,例如: 0.82 程序仍然运行。如何让它只接受我的一个选择?
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);
}
Here是一张图片,如果您觉得它更容易阅读。
答案 0 :(得分:3)
您可以使用某种循环(while,do-while,for),这将继续执行代码,直到满足(或未满足)条件。< / p>
以下是一个例子:
do {
code line 1;
code line 2;
code line 3;
...
} while(yourCondition);
如果满足yourCondition
(yourCondition == true
),则代码将返回code line 1
(将执行do
和while
之间的代码块)一旦条件不满足,它就会停止(yourCondition == false
)。 yourCondition
可以是任何返回true / false结果(boolean
)的表达式,例如2+2==4
。
如果您想在不符合yourCondition
的情况下继续循环播放,可以在表达式之前添加!
,这将评估您boolean
的相反方式(!yourCondition)
。
现在,如果您了解其工作原理,可以轻松将其应用到您的代码中。
答案 1 :(得分: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 或条件价格检查仍可分割。
答案 2 :(得分:0)
使用BigDecimal(而不是double)来处理金钱。它确切 - 双倍不是。 http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html
我会编写一个函数来获取用户输入。它不会回来直到 用户输入了允许值。
答案 3 :(得分:0)
虽然我的真实答案是评论中的答案,但你可以使用这样的东西。如果给出了正确的值,则递归检查。
import java.util.Scanner;
public class VendingMachine {
static Scanner keyboard = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Choose your price. Your options are: ");
for (double i = 0.25; i <= 1.25; i += 0.25) {
System.out.printf("$%.2f\n", i);
}
double price = checkMultipleValues(0.25,1.25, 0.25);
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);
}
private static double checkMultipleValues(double initial,double last,double step) {
System.out.println("Enter your selection now: ");
double price = keyboard.nextDouble();
for (double i = initial; i <= last; i += step) {
if (price == i) {
return price;
}
}
return checkMultipleValues( initial, last, step);
}
}
的 附录 强>
既然你喜欢@Sello,那你为什么不把它与@MrD结合起来呢?
do {
System.out.println("enter price");
price = in.nextDouble();
// System.out.println("you entered " + price);
} while (!(price % 0.25 == 0 && price <= 1.25 && price > 0));