我正在编写一个相对简单的Java程序,如果他们有特定的优惠券或奖金,可以为购物者计算折扣。它工作正常,但是当程序询问用户是否有任何优惠券时,我遇到了问题。
如果他们输入“n”,他们仍然必须经历循环,好像他们在退出之前用“y”回答一次。我知道这可能是某个地方的一个愚蠢的错误,但它让我疯狂,一旦结束我会欣赏一双新鲜的眼睛。
do {
System.out.println("Please enter the total price of the goods");
price = keyboard.nextDouble();
if (price < limits[0] || price > limits[1]) {
System.out.println("Invalid price. Please try again");
validPrice = false;
} else {
validPrice = true;
}
} while (!validPrice);
keyboard.nextLine();
do {
System.out.println("Does the customer have any additional discounts? y/n");
choice = keyboard.nextLine();
if (!choice.matches(inputRegexMatchPattern)) {
System.out.println("Invalid input – please re-enter");
} else if (choice.toLowerCase().charAt(0) == 'y') ;
{
System.out.println(choice);
do {
System.out.println("What type of discount does the customer have? [L]oyalty Card/[D]iscount Voucher");
input = keyboard.nextLine();
if (!input.matches(discountRegexMatchPattern)) {
System.out.println("Invalid input – please re-enter");
}
} while (!input.matches(discountRegexMatchPattern));
if (input.charAt(0) == 'l' || input.charAt(0) == 'L') {
voucherDiscounts += voucherDiscountsArray[0];
System.out.println("Loyalty Card discount accepted");
} else if (input.charAt(0) == 'd' || input.charAt(0) == 'D') {
voucherDiscounts += voucherDiscountsArray[1];
System.out.println("Discount Voucher accepted");
}
}
} while (!(choice.toLowerCase().charAt(0) == 'n'));
答案 0 :(得分:3)
这里有分号:
else if (choice.toLowerCase().charAt(0) == 'y') ;
这意味着您的循环将继续执行,尽管您做出了选择。 Java将此if
语句解释为没有任何正文。
删除分号,你应该好好去。
答案 1 :(得分:0)
do while
构造在实际测试条件之前始终执行循环的内容。
我想你想要的是一个简单的while
循环。