【问题标题】:How to use a Do-while loop that continuously prompts a user?如何使用不断提示用户的 Do-while 循环?
【发布时间】:2018-04-02 13:28:14
【问题描述】:

(我有一个作业问题一直困扰着 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循环让我想起这个。如果有人有一些好的提示或指南指出我将不胜感激。)

【问题讨论】:

  • 您不必重复打印声明。而且您还没有读取任何输入。而不是像那样分配变量,你应该使用 nextInt() 。

标签: java loops while-loop do-while


【解决方案1】:

你不需要写三遍System.out.println("Enter a number (&lt;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);

【讨论】:

    【解决方案2】:

    1.读数值

    正如胡安的评论所建议的,您没有阅读用户输入值。基本上,这是通过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,而你给他喂了别的东西:它抛出了这个。

    一个简单的类比是:扫描仪只能吃苹果。你给了他一个梨子:他吃了一点,然后吐了出来:“我只能吃苹果”。为了防止你的扫描仪吐出来,你可以问他:“试试看,如果这不是苹果,我们试试别的吧

    在代码中,它为您提供如下内容:

    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 扫描器进纸

    上面的代码工作。如何?如果你输入不是数字的东西,比如“aaaa”,你会得到无限的

    输入一个数字(

    这不是数字!

    为什么?因为扫描仪没有抛出你的输入。基本上,他要么应该吃梨(但他会呕吐),要么把它扔到垃圾箱里,但你从来没有告诉他把它扔到垃圾箱里!扫描器需要在尝试下一个输入之前消耗输入。

    简而言之:

    1. userInput 从 101 开始,因此进入了 while 循环
    2. 你输入aaaa
    3. InputMismatchException 被捕获。 “这不是一个数字!”打印出来
    4. userInput 值没有改变(仍然是 101),所以循环继续进行
    5. 在这个阶段,扫描器没有消耗上一个输入,所以下一个输入仍然是aaaa
    6. 转到 3. 重新开始

    如何解决这个问题?通过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);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 2020-02-20
      • 2021-07-27
      • 2016-07-19
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多