如何使用不断提示用户的Do-while循环?

时间:2017-10-21 15:41:32

标签: java loops while-loop do-while

(我有一个家庭作业问题,我一直坚持认为这与Java中的“do-while循环”有关。)

它要求我有一个do-while循环,继续提示用户输入“小于100的数字”,直到输入的数字实际上小于100。

(它将运行三个测试:) 例:测试1:  对于用户输入123,395,25,预期输出为:

Enter a number (<100): 
Enter a number (<100): 
Enter a number (<100): 
Your number < 100 is: 25

(这是我目前的代码:)

public class NumberPrompt {
   public static void main (String [] args) {
   Scanner scnr = new Scanner(System.in);
   int userInput = 0;

      do {
         System.out.println("Enter a number (<100):" );
         System.out.println("Enter a number (<100):" );
         System.out.println("Enter a number (<100):" );
         userInput = userInput + 25;
      } while (userInput > 100);
         System.out.print("");

      System.out.println("Your number < 100 is: " + userInput);
}

(我的输出与上面的测试1结果完全匹配,但我意识到我没有正确设置循环,因为当它执行第二次测试“-9”时,输出与我的第一次完全相同试验:)

Enter a number (<100):
Enter a number (<100):
Enter a number (<100):
Your number < 100 is: 25

(这是我第一周被介绍到循环中,我搜索了一些示例,但我没有找到许多“Do”while循环让我想起这个。如果有人有一些很好的提示或指南指向我,我将非常感激。)

2 个答案:

答案 0 :(得分:0)

您不需要写三次System.out.println("Enter a number (<100):" );。每次用户输入的值小于100时,它都会自动显示。您可以自己为userInput分配值,而不是从用户那里获取输入。你应该写下面给出的代码。

 do {
     System.out.println("Enter a number (<100):" );
     userInput = scnr.nextInt();
  } while (userInput > 100);
     System.out.println("Your number < 100 is " + userInput);

答案 1 :(得分:0)

1.Reading value

正如Juan的评论建议的那样,您没有阅读用户输入值。基本上,这是使用nextInt()方法完成的。更重要的是,int是原始类型,必须初始化。您选择值0.那么为什么不选择101以使它以不正确的值开始?然后你确定将触发while循环:

public static void main(String... aArgs) {

    Scanner sc = new Scanner(System.in);
    // initialise at 101 to trigger the while loop
    int userInput = 101;

    // as we start at 101, it will enter the loop at least once
    while (userInput > 100) {
        System.out.println("Enter a number (<100):");
        userInput = sc.nextInt();
    }

    System.out.println("Your number < 100 is: " + userInput);
}

2.永远不要信任用户

2.1异常捕获

上述代码可能足以让您获得批准。但是,为了学习,我有一个基本的原则:从不信任用户!。如果是上一个示例,如果用户输入azerty,那么您的程序会向您抛出InputMismatchException。那是什么?此错误告诉您扫描程序预期int并且您向他提供了其他内容:它会将其抛出。

一个简单的比喻是:扫描仪只能吃苹果。你给了他一个梨:他需要一点点然后把它扔掉:&#34; 我只能吃苹果&#34;。为了防止你的扫描仪呕吐,你可以问他:&#34; 尝试一下,如果这不是苹果,那就试试别的&#34;

在代码中,它提供了类似的内容:

public static void main(String... aArgs) {

    Scanner sc = new Scanner(System.in);
    // initialise at 101 to trigger the while loop
    int userInput = 101;

    // as we start at 101, it will enter the loop at least once
    while (userInput > 100) {
        // tell the scanner to try something
        try {
            System.out.println("Enter a number (<100):");
            userInput = sc.nextInt();
        }
        // if the input is not a number, tell him do this this:
        catch (InputMismatchException e) {
            System.out.println("This is not a number!");
        }
    }

    System.out.println("Your number < 100 is: " + userInput);
}

如果您不熟悉try/catch条款,可以阅读this

2.1扫描仪喂食

以上代码正在运行。怎么样?如果你输入一些不是数字的东西,比如&#34; aaaa&#34;,你就会有无限的

  

输入一个数字(&lt; 100):

     

这不是数字!

为什么呢?因为扫描仪没有输出你的输入。基本上,他要么应该吃梨(但他会呕吐)或扔到垃圾桶但是你从未告诉过他把它丢到垃圾箱里!扫描仪需要在尝试下一次输入之前使用输入。

简而言之:

  1. userInput从101开始,因此输入while循环
  2. 您输入aaaa
  3. InputMismatchException被抓住了。 &#34;这不是数字!&#34;打印出来
  4. userInput值没有改变(仍然在101),所以循环继续
  5. 在此阶段,扫描程序未使用上一个输入,因此下一个输入仍为aaaa
  6. 转到3.然后重新开始
  7. 如何解决这个问题?告诉扫描仪使用next()消费输入:

    public static void main(String... aArgs) {
    
        Scanner scnr = new Scanner(System.in);
        // initialise at 101 to trigger the while loop
        int userInput = 101;
    
        // as we start at 101, it will enter the loop at least once
        while (userInput > 100) {
            // tell the scanner to try something
            try {
                System.out.println("Enter a number (<100):");
                userInput = scnr.nextInt();
            }
            // if the input is not a number, tell him do this this:
            catch (InputMismatchException e) {
                // consume the incorrect input with scnr.next()
                // so that user can enter another input
                System.out.println(scnr.next() + " is not a number!");
            }
        }
    
        System.out.println("Your number < 100 is: " + userInput);
    }