首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Scanner仅接受有效的int作为输入

如何使用Scanner仅接受有效的int作为输入
EN

Stack Overflow用户
提问于 2010-05-26 20:18:18
回答 6查看 257.6K关注 0票数 27

我正在试着让一个小程序更健壮,我需要一些帮助。

代码语言:javascript
复制
Scanner kb = new Scanner(System.in);
int num1;
int num2 = 0;

System.out.print("Enter number 1: ");
num1 = kb.nextInt();

while(num2 < num1) {
    System.out.print("Enter number 2: ");
    num2 = kb.nextInt();
}

  1. 数字2必须大于数字1
  2. 还希望程序自动检查和忽略,如果用户输入一个字符而不是数字。因为现在当用户输入r而不是数字时,程序就会退出。
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-05-26 20:44:25

使用Scanner.hasNextInt()

如果此扫描器输入中的下一个标记可以使用int方法解释为默认基数中的nextInt()值,则nextInt()返回nextInt()。扫描仪不会前进超过任何输入。

下面是一段代码片段来说明:

代码语言:javascript
复制
Scanner sc = new Scanner(System.in);
System.out.print("Enter number 1: ");
while (!sc.hasNextInt()) sc.next();
int num1 = sc.nextInt();
int num2;
System.out.print("Enter number 2: ");
do {
    while (!sc.hasNextInt()) sc.next();
    num2 = sc.nextInt();
} while (num2 < num1);
System.out.println(num1 + " " + num2);

你不需要parseInt或者担心NumberFormatException。请注意,由于hasNextXXX方法不会越过任何输入,因此如果您想跳过“垃圾”,则可能必须调用next(),如上所示。

相关问题

票数 36
EN

Stack Overflow用户

发布于 2010-05-26 20:26:10

  1. 条件num2 < num1 num2 <= num1如果num2必须大于num1
  2. 不知道kb对象是什么,我会读取一个String,然后try Integer.parseInt(),如果您不catch一个异常,则它是一个数字,如果您这样做了,则读取一个新的异常,也许可以通过将num2设置为Integer.MIN_VALUE并在您的示例中使用相同类型的逻辑。

<>G29catch>

票数 4
EN

Stack Overflow用户

发布于 2010-05-26 20:34:51

这应该是可行的:

代码语言:javascript
复制
import java.util.Scanner;

public class Test {
    public static void main(String... args) throws Throwable {
        Scanner kb = new Scanner(System.in);

        int num1;
        System.out.print("Enter number 1: ");
        while (true)
            try {
                num1 = Integer.parseInt(kb.nextLine());
                break;
            } catch (NumberFormatException nfe) {
                System.out.print("Try again: ");
            }

        int num2;
        do {
            System.out.print("Enter number 2: ");
            while (true)
                try {
                    num2 = Integer.parseInt(kb.nextLine());
                    break;
                } catch (NumberFormatException nfe) {
                    System.out.print("Try again: ");
                }
        } while (num2 < num1);

    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2912817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档