使用扫描仪时检查变量类型

时间:2014-02-28 19:39:17

标签: java java.util.scanner

我正在写一个小程序(学生,虽然不是课堂上的任务......而是上一个作业的游戏)。以前在课堂上,在学习do/while循环时,我写了一个程序,提示用户输入整数。当用户键入0时,它用于退出循环,然后输出所有键入的整数的平方和。

示例输出(换行时间隔为双倍):

输入一个整数:3

输入一个整数:0

正方形的总和是9

我现在的目标是更进一步。如上所述,如果用户键入除整数之外的任何内容,程序将崩溃。我一直在努力寻找允许用户输入其他形式的值的方法,而不会让它崩溃。在引用下面的代码时(这是当前程序崩溃的任何值ints),我尝试使用console.hasNextInt()方法添加if语句的变体。然而,我在此尝试会导致number测试中do/while未被引用的错误。

任何人都可以向我提供任何提示吗?我们将不胜感激。

    public static void userInterface() {
    Scanner console = new Scanner(System.in);

    int number;
    int numberSquared;
    int squaredOutput = 0;

    do {
        System.out.print("Type an integer (0 to quit): ");
        number = console.nextInt(); 

        if (number > 0 || number < 0) {
            numberSquared = number * number;
            squaredOutput += numberSquared;
        }
    } while (number != 0);


    System.out.println("The sum of the squares is " + squaredOutput);
}    

3 个答案:

答案 0 :(得分:2)

问题是你使用console.nextInt();只接受下一个int。

您可以使用:console.nextLine();

它允许你的程序接受一个字符串,你可以在必要时将它解析为一个Int:

try { 
        number=Integer.parseInt(console.nextLine()); 
    } catch(NumberFormatException e) { 
        System.out.println("Please input an Integer");
    }

答案 1 :(得分:1)

只需使用此功能

public static int next(String message) {
    while (true) {
        System.out.println(message);
        try {
            return new Scanner(System.in).nextInt();
        } catch (Exception e) {
            System.out.println("Invalid input.");
        }
    }
}

答案 2 :(得分:0)

您的代码存在问题。当您使用console.nextInt()并且扫描程序尝试将每个字符串解析为Integer时。更好的解决方案是使用console.nextLine()并自己解析它的数字并捕获可能抛出的异常,如果该字符串不能解析为您想要的任何数字。  它可能看起来像这样。

String yourValue = console.nextLine();
try{
  int value = Integer.parseInt(yourValue);
}catch(NumberFormatException e){
  System.out.println("watch out this value is unparsable!");
}