Java:循环问题

时间:2013-11-30 19:37:39

标签: java

我正在编写一个相对简单的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'));

2 个答案:

答案 0 :(得分:3)

这里有分号:

else if (choice.toLowerCase().charAt(0) == 'y') ;

这意味着您的循环将继续执行,尽管您做出了选择。 Java将此if语句解释为没有任何正文。

删除分号,你应该好好去。

答案 1 :(得分:0)

do while构造在实际测试条件之前始终执行循环的内容。

我想你想要的是一个简单的while循环。