在我的方法中,我希望用户输入是否首先通过而需要进入第二个while循环,如果条件失败则需要重新运行循环,而不是重新运行本身,而是在第一次运行时执行。

//Method to read, validate and store postcode and purchase amount for N customers
public  void addRecord(int customerCounter) throws IOException
{
    int postcode;
    double purchaseAmount;

    int conform =0;

    do{
        BufferedReader breader= new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Postcode: ");
        postcode= Integer.parseInt(breader.readLine());

        if(4121 >postcode)
        {
            System.out.print("Postcode must be greater than 4121");
            System.out.print("Try again: ");
        }
        else if(postcode > 4123)
        {
            System.out.print("Postcode must be less than 4123");
            System.out.print("Try again: ");
        }
        else
        {
            conform = 1;
            //System.out.println(conform);
        }
    }
    while(4121 >postcode && postcode > 4123);



    if(conform == 1)
    {
        System.out.println(conform);
        do
        {
            BufferedReader breader2= new BufferedReader(new InputStreamReader(System.in));
            breader2= new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Purchase Amount: ");
            purchaseAmount= Double.parseDouble(breader2.readLine());

            if(purchaseAmount < 60)
            {
                System.out.print("Purchase Amount must be greater than $60");
                System.out.print("Try again: ");
                continue;
            }
            else if(purchaseAmount > 500)
            {
                System.out.print("Purchase Amount must be greater than $500");
                System.out.print("Try again: ");
            }
        }
        while(purchaseAmount < 60 && purchaseAmount > 500);

    }

}

最佳答案

您在while中的条件是错误的,它们总是错误的

postcode = 5000;
while(postcode < 4121 && postcode > 4123); -> while(false && true); -> false

postcode = 3000;
while(postcode < 4121 && postcode > 4123); -> while(true && false); -> false


使用OR代替AND

while(postcode < 4121 || postcode > 4123);


同样是第二次。

第一个while的第二次执行可能是因为您再次调用addRecord

09-10 00:18
查看更多