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

Java Try-catch块,Catch块不会重新提示用户输入新值[重复]

司徒云
2023-03-14

我是Java新手,想问你一个问题。

我编写了下面的代码,其中“numofthreads”应该由用户通过控制台分配一个有效的int值。

import java.util.Scanner;

public class Main {

    public static void main(String args[]){

        int numOfThreads;
        boolean promptUser = true;

        Scanner keyboard = new Scanner(System.in);

        while (promptUser)
        {
            try{
                numOfThreads = keyboard.nextInt();
                promptUser = false;
            }
            catch(Exception e){
                System.out.println("Entry is not correct and the following exception is returned: " + e);
                numOfThreads = keyboard.nextInt(); // DOES NOT SEEM TO BE ASKING FOR A NEW INPUT
            }
        }
    }
}

共有1个答案

仉宸
2023-03-14

它不是因为NextInt试图使用最后一个令牌。当有一个无效的输入,它不能消耗它。因此,下面的NextInt调用也不能使用它。在numofthreads=keyboard.nextint()之前编写keyboard.nextline就可以了。

catch(Exception e){
    System.out.println("Entry is not correct and the following exception is returned: " + e);
    // this consumes the invalid token now
    keyboard.nextLine();
    numOfThreads = keyboard.nextInt(); // It wasn´t able to get the next input as the previous was still invalid
    // I´d still rewrite it a little bit, as this keyboard.nextInt is now vulnerable to throw a direct exception to the main
}
 类似资料:
  • 问题内容: 我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下 但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示: 我希望有人能够解释为什么

  • 问题内容: 我正在审查一些新代码。该程序仅具有try和finally块。由于不包含catch块,如果try块遇到异常或任何可抛出的异常,它将如何工作?它是否直接进入了finally块? 问题答案: 如果try块中的任何代码都可以引发已检查的异常,则它必须出现在方法签名的throws子句中。如果引发了未经检查的异常,则该异常会冒泡退出方法。 无论是否引发异常,都始终执行finally块。

  • 问题内容: 好的,这可能是一个非常愚蠢的问题,但是我发现关于此的PHP文档以及一些Internet搜索并没有使我对此有所任何了解。 什么时候应该使用try-catch块来改进我的应用程序? 我读过有人说我们应该仅使用try- catch块来防止致命错误。我读过别人的话说,我们应该只在意外错误上使用它(等什么?意外?如果它们是意外错误,如何使用try- catch防止它们出现?我应该将所有应用程序代

  • 当用户输入字符串(例如“”)时,程序应该给出输出“”,然后提示用户键入有效输入。当我键入字符串时,我会在线程“main”java.util.InputMismatchException中得到错误消息