当前位置: 首页 > 知识库问答 >
问题:

如何通过尝试和捕获来保持循环以获得正确的输入?

辛才俊
2023-03-14

我正在尝试创建一个检查整数的函数,并将继续循环,直到用户正确输入17或更高的整数。但是,如果我输入错误的输入,例如“K”或“

public static int getAge(Scanner scanner) {
    int age;
    boolean repeat = true;

    while (repeat) {
        try
        {
          System.out.println("Enter the soldier's age: ");
          age = scanner.nextInt();
          repeat = false;
        }
        catch(InputMismatchException exception)
        {
          System.out.println("ERROR: You must enter an age of 17 or higher");
          repeat = true;
        }
    }
    return age;
}

共有2个答案

公羊奇
2023-03-14

我不会把扫描程序传递给你的方法,我会尝试重新构造它,并将方法分配给你的main变量,如下所示:

我还在catch中使用递归来调用捕获异常时的方法,我还建议使用一般异常,使其捕获(exception exception)

  main method call of method
    ---------------------------
        int something= getAge();
        ----------------------------------------------------------

         method structure like this,
    ---------------------------------------------

        public static int getAge() {
            int age;
    age = scanner.nextInt();
            boolean repeat = true;

            while (repeat) {
                try
                {
                  System.out.println("Enter the soldier's age: ");
                  
                   
        if(age<=17){
                  repeat = false;
        }

    if(age>17){


    getAge();
    }
                }
                catch(InputMismatchException exception)
                {
                  System.out.println("ERROR: You must enter an age of 17 or higher");
                  getAge();
                }

            }
            return age;
        }
仇正平
2023-03-14

如果下一个可用的输入标记不是整数,< code>nextInt()会保留该输入不被使用,在< code>Scanner中缓冲。这个想法是,您可能想要尝试使用其他的< code>Scanner方法来读取它,比如< code>nextDouble()。不幸的是,这也意味着除非您采取措施清除缓冲的垃圾,否则下一次对< code>nextInt()的调用将会尝试(并且失败)再次读取相同的垃圾。

因此,要清除垃圾,您需要在尝试再次调用 nextInt() 之前调用下一个 () 或 nextLine()。这确保了下次调用 nextInt() 时,它将有新的数据需要处理,而不是相同的旧垃圾:

try {
    //...
} 
catch(InputMismatchException exception)
{
    System.out.println("ERROR: You must enter an age of 17 or higher");
    scanner.next();   // or scanner.nextLine()
    repeat = true;
}
 类似资料:
  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 问题内容: 我有一个while循环,应该捕获一个非整数输入,并要求用户重新输入一个整数。但是,它只是无限循环错误消息。有谁知道为什么不允许第二次扫描仪输入? 问题答案: 当您输入的令牌不是数字时,调用nextInt不会将扫描仪移到令牌之外。结果,它只是一遍又一遍地读取相同的令牌。 这是nextInt的文档:http : //download.oracle.com/javase/6/docs/api

  • 我真的不知道这个问题。。。 如果数字不正确,块将捕获异常,当我输入-1或0时,它将捕获异常并要求我再次输入数字。。。但如果我键入类似asdasd的内容,它将运行一个无限循环。

  • 问题内容: 将信号量动作包装在try- catch块中的正确方法是什么?如果在获取一定数量(但不是全部)所请求的许可后中断获取动作,会发生什么情况?你怎么知道又要释放多少?应该将发布放到一个“最终”块中,但是如果操作被中断,您是否不可以发布未获得的许可? 问题答案: 该方法是一项全有或全无的操作,您将获得所有请求的许可或被阻止。您可以对代码进行两次尝试,也可以让(可能的)中断的异常阻止气泡进入调用

  • 问题内容: 当使用Express for Node.js时,我注意到它输出的HTML代码没有换行符或制表符。尽管下载可能更有效,但在开发过程中可读性不强。 如何获得Express以输出格式正确的HTML? 问题答案: 在您的主要位置或所在位置: 快递4.x 快递3.x 快递2.x 我输入漂亮的字样是因为您希望通过使用“丑陋”来提高效率。在生产中进行部署时,请确保设置环境变量。可以使用您在的“脚本”