扫描程序中带有负数的奇怪行为

时间:2011-06-11 03:37:10

标签: java java.util.scanner

我试图找到答案,但不能,也许是一个小小的奇怪我要问的问题,我想知道这里出了什么问题。 (对不起,我的英语,它很小,但我会尽我所能)

这是交易,我正在使用一个方法在java中返回一个int,该方法使用try catch来避免程序爆炸(请注意,我刚刚开始编程和java)

好吧,这个metod使用try catch这样:

    public int safeEnter(String message, int min, int max) {
    /**
     * This method takes some parameters and validates the true enter of an int
     * inside some ranges
     */
    int aux;
    String auxInt;

    do {
        auxInt = input.nextLine().trim();
        try {
            aux = Integer.parseInt(auxInt);
        } catch (NumberFormatException ex) {
            System.out.println("Enter a " + message + " between " + min + " & " + max);
            aux = Integer.MIN_VALUE;
        }
    }
    while(aux < min || aux > max);        
    return aux;
}

(所有这些代码都被描述为英语^。^)

Weel,问题在于使用这样的方法:

int month = safeEnter("month", 1, 12);

这将验证问题,如果我给它一个字符或一个单词而不是一个int,并将再次要求一个int,这实际上是作为计划的prety,但如果我给这个负数我应该在它之前输入2来显示消息并再次询问该号码,如果我给它一个字符串或者在范围之间或者范围之外但不是正面的话,这不会是hapenn。

您认为这里的问题是什么?因为我“认为”它只是没关系,有关Scanner的事情,我应该知道或者我不知道?

最佳, 毛

1 个答案:

答案 0 :(得分:1)

负数是有效整数,不抛出NumberFormatException。因此,您的循环条件计算结果为true,并且您的执行循环再次执行,并且您的扫描程序再次请求输入。

您可以尝试以下方法:

Scanner input = new Scanner(System.in);
while(true) {
    try {
        auxInt = input.nextLine().trim();
        aux = Integer.parseInt(auxInt);

        if(aux >= min & aux <= max)
            break;

        System.out.println("Enter a " + message + " between " + min + " & " + max);
    } catch (NumberFormatException ex) {
        System.out.println("Enter a " + message + " between " + min + " & " + max);
}