0

我正在尝试一个简单的 do while 循环,假设输入小于 1 且大于 1000 时运行。它应该要求用户输入正确的数字,否则在循环中。它现在似乎正在做的是再重复一次循环,要求正确的输入,然后显示结束消息。如果满足条件,不确定为什么会重复它

String name = JOptionPane.showInputDialog(null,
        "Please enter students lastname");

int input = Integer.parseInt(JOptionPane.showInputDialog(null,
        "Please enter students ID"));

do {
    JOptionPane.showMessageDialog(null,
            "Please enter a student ID within the correct parameters");
    input = Integer.parseInt(JOptionPane.showInputDialog(null,
            "Please enter students ID"));
} while (input < 1 && input > 1000);

// Output dialog with user input
JOptionPane.showMessageDialog(null, "StudentID: " + input
        + "\nStudent Last: " + name);
4

3 回答 3

5

您至少要展示两次对话框——一次在循环之前,一次在循环内。

直到循环至少执行一次之后,do-while 才会测试条件。

您可以:

  • 消除第一次调用以显示输入对话框。
  • 或者将您的 do-while 循环更改为 while 循环。

此外,请参阅@GrailsGuy 对循环测试的评论。您当前的测试将始终失败。

于 2013-03-19T18:24:43.753 回答
1

我认为您虽然 CONDITION 不正确,因为我阅读了打印声明中的评论,我相信您需要

 while (input > 1 && input < 1000);

因为ID不能是负数。

请记住,如果 ID 值介于 之间,则此条件为真2 to 999

正如您评论的那样:只是为了澄清,如果用户输入范围之外的数字(1-1000),即 2005,我希望循环循环,要求用户输入范围内的数字,直到满足该条件

喜欢,阅读评论以了解我的代码是什么:

input = -1;
while(input < 1 || input > 1000){ 
//    ^              ^ OR greater then 1000
// either small then 1   
}

注意:我选择了 OR 而不是 AND,因为任一条件失败,您的循环都应该继续。

于 2013-03-19T18:27:23.447 回答
-2

我会用一个来改变它while

int input = Integer.parseInt(JOptionPane.showInputDialog(null,
    "Please enter students ID"));
while(input < 1 || input > 1000) {
    // Your stuff
}

说明

我认为错误的是,首先,任何数字都不能(同时)小于 1 和大于 1000,所以很明显,有效输入应该在指定范围之外(也就是说,从-Infinity0 1001Infinity)。

其次,另一个答案中提到的内容:do...while循环总是至少运行一次,只要while条件为真,它就会重复。由于输入是在进入循环之前always takes place... What's the need to request a correction on a possibly correct被读取的,“确认输入”的值?

我认为错误的是对验证规则的含义的误解:

我正在尝试一个简单的 do while 循环,如果输入小于 1并且大于 1000则假设运行

这个词是什么意思?我认为这意味着输入必须在给定范围之外。

于 2013-03-19T18:27:36.763 回答