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

Java:根据用户控制台输入显示不同的结果,无需尝试。。。捕获声明

潘畅
2023-03-14

我试图用Java编写一个程序,使用Scanner类获取用户输入。用户必须输入任何正整数。根据用户操作,结果应如下所示:

>

Oops! You entered something different, but not an integer number, try again

用户输入的不是正整数-

You entered not a positive integer number, try again

用户输入了一个正整数-

User's positive integer number - ...

我已经使用循环和扫描类编写了一些代码

public static void main(String[] args) {
        
        int userIntNum;
        boolean isUserInputCorrect;
        
        @SuppressWarnings("resource")       
        Scanner sc = new Scanner(System.in);
        userIntNum = 0;
        
        System.out.println("Please, enter a positive integer number");
        
        isUserInputCorrect = (sc.hasNextInt() && (userIntNum > 0)); 
                
        // double console input for correct integer number
        while (isUserInputCorrect == false) {
            if (!sc.hasNextInt()) {
                System.out.println("Oops! You entered something different, but not an integer number, try again");
                sc.nextLine();
            } else if (sc.nextInt() <= 0) {
                System.out.println("You entered not a positive integer number, try again");
                sc.nextLine();
            } else {
                break;
            }
        }
        userIntNum = sc.nextInt();
                
        System.out.println("User's positive integer number - " + userIntNum);

当我在控制台中输入一个正整数(正确的输入)时,程序出于某种原因要求我输入两次这个数字。此外,如果我先输入一个整数,然后输入任何由空格分隔的非正数,它会打印出这个错误的数字。如果我先放一个整数,然后不是一个用空格分隔的整数,它会抛出一个异常。

为什么会发生这种情况,如何修复这些错误?

共有2个答案

白子默
2023-03-14

根据以上Elliott的回答,我想提供一个替代解决方案,解决您的以下问题:

而且,如果我先放一个整数,然后再放任何一个用空格隔开的非正数,它就会打印这个不正确的数字;而如果我先放一个整数,然后不放一个用空格隔开的整数,它就会抛出异常。

Scanner类将以时间方式单独读取令牌。如果您查看nextInt()函数,您将看到它抛出您可以显式捕获的InputMismatchException

另外,看看Java模数运算符。因为您明确地寻找偶数值,所以模运算符在这里非常有价值。

public static void main(String[] args) {

    int userIntNum = 0;
    boolean isUserInputCorrect = false;

    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);

    do {
        System.out.println("Please, enter a positive integer number");
        try {
            userIntNum = sc.nextInt();
            isUserInputCorrect = (userIntNum > 0 && userIntNum % 2 == 0);
        } catch (InputMismatchException ex) {
            System.out.println("Invalid input: please enter an integer value");
            sc.next();
        }
    } while(!isUserInputCorrect);
        System.out.println("User's positive integer number - " + userIntNum);
}
郑松
2023-03-14

首先,我要消除isUserInputCorrect。你试图用它做的太多了,相反,我会在userIntNum小于或等于零时循环。另外,尝试限制变量范围。比如,

Scanner sc = new Scanner(System.in);
int userIntNum = -1;

System.out.println("Please, enter a positive integer number");
// double console input for correct integer number
while (userIntNum <= 0) {
    if (sc.hasNextInt()) {
        userIntNum = sc.nextInt();
    } else {
        System.out.println("Oops! You entered something different, "
                + "but not an integer number, try again");
        sc.nextLine();
    }
    if (userIntNum <= 0) {
        System.out.println("You entered not a positive integer number, try again");
    }
}
System.out.println("User's positive integer number - " + userIntNum);
 类似资料:
  • 问题内容: 通过控制台进行任何输入的数据类型(如我使用BufferedReader类所做的那样)为String。之后,我们将其类型转换为需要查询的数据类型(如Inter.parseInt()为整数)。但是在C语言中,我们可以接受任何输入原始数据类型,而在Java中,所有输入类型都是Neccerily String。为什么是这样? 问题答案: 控制台输入实际上以一系列字节而不是字符串的形式读入。这是

  • 问题内容: 我意识到在SO上也有类似的问题,但是它们并不能完全解决我的问题。 我想要一个给定Class对象的方法,该方法将在该Class(如果存在)上调用“ main”方法,即public static void main,并捕获该main方法的控制台输出。进行调用的类是非守护线程。 我已经有部分代码了,但是我不确定如何捕获控制台输出,最重要的是,如何仅捕获此特定线程的输出。这是我到目前为止的内容

  • 我一直在尝试编码来查找给定数组元素的LCM。我的代码如下 我的问题是,当我输入时,输出控制台会冻结。我尝试了另一种没有while循环的方法。也就是说,消除了while循环,并在最后添加了一个if循环。 但现在编译器抛出一个错误,指出并非所有代码路径都返回一个值。有人能帮我解决代码中的问题吗?我是一名编程初学者。提前谢谢!!

  • 我正在用Jumpsuit构建一个webapp,我注意到了一个奇怪的错误。在React中,通常会导致错误被打印到控制台的事情不会这样做,除非我特意将该代码放在try catch块中。 例如,在一个组件的渲染方法中,我有这个: 并且在中,我有这个返回来测试它: 现在,土豆不是真正的成分,也不是我进口的任何东西。通常,如果您尝试此操作,控制台将显示一个引用错误,表示“未定义马铃薯”。然而,它只是使应用程

  • 本文向大家介绍python实现在控制台输入密码不显示的方法,包括了python实现在控制台输入密码不显示的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现在控制台输入密码不显示的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 本文向大家介绍Android WebView控件捕获用户输入的信息,包括了Android WebView控件捕获用户输入的信息的使用技巧和注意事项,需要的朋友参考一下 WebView可所谓是Android中最强大的控件之一,无所不能。 于是有这么一个需求,用户在app之中内嵌的WebView中输入帐号密码的时候,App需要捕获已经输入的帐号密码。 当用户输入帐号密码,一般情况下会进行页面转跳,在页