有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用持续提示用户的Dowhile循环?

(我有一个家庭作业问题一直困扰着我,它与Java中的“do while loops”有关。)

它要求我有一个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) 个答案

  1. # 1 楼答案

    一,。阅读价值

    正如Juan的评论所暗示的,您并没有阅读用户输入值。基本上,这是通过^{}方法完成的。此外,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.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”,你会有一个无限的数字

    Enter a number (<100):

    This is not a number!

    为什么?因为扫描仪没有把你的输入扔掉。基本上,他要么吃了梨(但他会吐),要么把它扔进垃圾箱,但你从来没有告诉他把它扔进垃圾箱!在尝试下一次输入之前,扫描仪需要使用输入

    简而言之:

    1. userInput从101开始,因此进入while循环
    2. 您可以输入aaaa
    3. 抓到了InputMismatchException。“这不是一个数字!”是打印出来的
    4. userInput值没有改变(仍然是101),所以循环继续进行
    5. 在这个阶段,扫描仪没有使用前一个输入,因此下一个输入仍然是^{
    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);
    }
    
  2. # 2 楼答案

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

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