循环用户输入直到满足条件

Posted

技术标签:

【中文标题】循环用户输入直到满足条件【英文标题】:Loop user input until conditions met 【发布时间】:2013-04-05 20:42:06 【问题描述】:

我需要让用户输入一个数字作为范围的开始,然后输入另一个数字作为范围的结束。起始数字必须为 0 或更大,结束数字不能大于 1000。两个数字都必须能被 10 整除。我找到了满足这些条件的方法,但是如果不满足这些条件,我的程序只会告诉用户他们的输入不正确。我是否可以对其进行编码,以便在用户输入后它会检查以确保满足条件,如果它们没有回送并再次输入。这是我到目前为止的代码。

    Scanner keyboard = new Scanner(System.in);
    int startr;
    int endr;
    System.out.println("Enter the Starting Number of the Range: ");
    startr=keyboard.nextInt();
    if(startr%10==0&&startr>=0)
        System.out.println("Enter the Ending Number of the Range: ");
        endr=keyboard.nextInt();
        if(endr%10==0&&endr<=1000)

        else
            System.out.println("Numbers is not divisible by 10");
        
    else
        System.out.println("Numbers is not divisible by 10");
    

【问题讨论】:

【参考方案1】:

轻松搞定:

Scanner keyboard = new Scanner(System.in);
int startr, endr;
boolean good = false;
do

  System.out.println("Enter the Starting Number of the Range: ");
  startr = keyboard.nextInt();
  if(startr % 10 == 0 && startr >= 0)
    good = true;
  else
    System.out.println("Numbers is not divisible by 10");

while (!good);

good = false;
do

    System.out.println("Enter the Ending Number of the Range: ");
    endr = keyboard.nextInt();
    if(endr % 10 == 0 && endr <= 1000)
      good = true;
    else
      System.out.println("Numbers is not divisible by 10");

while (!good);

// do stuff

【讨论】:

只是一个快速跟进的问题,while 语句中的 (!good) 到底在说什么?虽然好 = 原始价值? good 表示good == true!good 表示good == false(但== boolean condition 通常是不好的做法)。 这不断在nextInt() 声明中向我抛出IllegalStateException【参考方案2】:

你需要使用一段时间,比如:

while conditionsMet is false
    // gather input and verify
    if user input valid then
        conditionsMet = true;
end loop

应该这样做。

【讨论】:

我建议让代码更接近 Java - while (!conditionsMet)if (/*user input valid*/)、没有then 和没有end loop 可选。【参考方案3】:

通用程序是:

    在无限循环中读取输入。 满足条件时使用break; 语句退出循环。

例子:

Scanner keyboard = new Scanner(System.in);
int startr, endr;

for (;;) 
    System.out.println("Enter the starting number of the range: ");
    startr = keyboard.nextInt();
    if (startr >= 0 && startr % 10 == 0) break;
    System.out.println("Number must be >= 0 and divisible by 10.");


for (;;) 
    System.out.println("Enter the ending number of the range: ");
    endr = keyboard.nextInt();
    if (endr <= 1000 && endr % 10 == 0) break;
    System.out.println("Number must be <= 1000 and divisible by 10.");

如果在无效输入后您只想显示错误消息而不重复初始提示消息,请将初始提示消息移到循环上方/外部。

如果您不需要单独的错误消息,您可以重新安排代码以使用 do-while 循环来检查条件,这会更短一些:

Scanner keyboard = new Scanner(System.in);
int startr, endr;

do 
    System.out.println("Enter the starting number of the range.");
    System.out.println("Number must be >= 0 and divisible by 10: ");
    startr = keyboard.nextInt();
 while (!(startr >= 0 && startr % 10 == 0));

do 
    System.out.println("Enter the ending number of the range.");
    System.out.println("Number must be <= 1000 and divisible by 10: ");
    endr = keyboard.nextInt();
 while (!(endr <= 1000 && endr % 10 == 0));

【讨论】:

以上是关于循环用户输入直到满足条件的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中循环直到满足条件

验证输入是否满足条件

尝试循环 API 调用直到满足条件

如何重复代码直到满足特定条件? [复制]

在循环内进行重复的ajax调用,直到满足条件

迭代地和分层地循环遍历行,直到满足条件