如何坚持用户输入是一个int?

时间:2012-10-29 02:43:26

标签: java input int java.util.scanner

这里的基本问题..我将首先要求您不要回复任何代码,因为这可能只会让我更加困惑(编程菜鸟)。我正在寻找关于如何解决这个问题的明确解释。

我有一个扫描仪,可以读取用户的输入。提示用户输入1到150之间的int值(仅限整数)。我得到的值如下:

    Scanner scan = new Scanner(System.in);
    int input = scan.nextInt();

继续我的计划,一切正常。

不幸的是,代码并不完全是防弹的,因为任何非整数的输入都可以破坏它(字母,符号等)。

如何使代码更加健壮,哪里可以验证只输入了一个int?

这些是我希望的结果:

让我们说输入是:

23 -> valid
fx -> display an error message, ask the user for input again (a while loop would do..)
7w -> error, again
3.7 -> error
$$ -> error
etc

7 个答案:

答案 0 :(得分:12)

Scanner.hasNextInt()如果下一个标记是数字,则返回true,否则返回false

在这个例子中,我调用hasNextInt()。如果它返回true,我会经过一段时间并设置输入;如果它返回false,则我丢弃输入(scanner.next();)并重复。

Scanner scan = new Scanner(System.in);
while(!scan.hasNextInt()) {
    scan.next();
}
int input = scan.nextInt();

答案 1 :(得分:3)

这是一个带有提示和注释的简单示例。

Scanner scan = new Scanner(System.in);
System.out.print("Enter an integer: "); // Initial prompt for input

// Repeat until next item is an integer
while (!scan.hasNextInt()) 
{        
    scan.next(); // Read and discard offending non-int input
    System.out.print("Please enter an integer: "); // Re-prompt
}

// At this point in the code, the user has entered an integer
int input = scan.nextInt(); // Get the integer

// And now you can use the input variable.

答案 2 :(得分:1)

使用scan.hasNextInt()确保下一个输入为int

答案 3 :(得分:0)

得到"任何东西"并解析它:

Scanner scan = new Scanner(System.in);

Integer number = null;
while (number == null) {
    try {
        number = Integer.parseInt(scan.next());
    } catch (NumberParseException e) {
        System.out.println("bad input: " + input);
    }
}

答案 4 :(得分:0)

没有任何代码,只有英文,我会说有两件事你需要测试或注意。首先输入是int,第二个是int在正确的范围内。

就伪代码而言,首先要做的是确保它是一个int。声明一个名为“input”的int,我会放一个try / catch块,你尝试使用parseInt()在用户输入中扫描为int。如果try部分失败,您知道它不是int并且可以返回错误消息。

然后,既然您知道“input”是一个int,您可以测试它是否小于1或大于150,并返回错误消息,如果是这样的话!

答案 5 :(得分:0)

我编写了一个示例,确保只有输入数字而不是无效值时程序才会继续。别担心,我添加了所需的解释。

程序要求用户输入一个数字。循环确保在输入有效数字之前不会继续处理。在此之前,我已经定义了一个变量“inputAccepted”,它具有false作为默认值。如果他输入一个数字,变量“inputAccepted”将设置为true,程序将离开循环。但是如果他输入的不是数字,则会在此时抛出异常,并且不会执行将变量“inputAccepted”设置为true的行。而是打印出一条消息,告诉用户他的输入无效。由于“inputAccepted”无法设置为true,因此循环将再次执行相同的操作,直到字符串可以转换为数字。

You can test the program here.

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean inputAccepted = false;
        while (!inputAccepted) {
            try {
                System.out.print("Please enter a number: ");
                Integer.valueOf(input.nextLine());
                inputAccepted = true;
            } catch (NumberFormatException e) {
                System.out.println("Not a valid number.");
            }
        }
        System.out.println("Thank you!");
    }
}

答案 6 :(得分:-1)

公共类示例{

/**
 * author CLRZ
 */
public static void main(String[] args) {
    int a; // variable
    Scanner in = new Scanner(System.in); // scans your input
    System.out.println("Enter your number's choice:"); 
    int sem1 = in.nextInt(); // reads next integer
    if (sem1 == 1) // conditioned if your choice number is equal to 1
    System.out.println("Hello World1"); // output wil be Hello World
    int b;

    System.out.println("Enter your number's choice:");
    int sem2 = in.nextInt(); 
    if (sem2 == 2)
    System.out.println("Hello World2");
    int c;

    System.out.println("Enter your number's choice:");
    int sem3 = in.nextInt(); 
    if (sem3 == 3)
    System.out.println("Hello World3");
}

}