2011-06-11 35 views
1

我试图找到答案,但不能,也许是一个奇怪的问题,我会问什么,我想知道这里出了什么问题。 (对不起,我的英语,它litlle可怜,但我会尽我所能)扫描仪在java中使用负数的奇怪行为

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

好,这梅托德使用尝试捕捉这样的:(所有这些代码已经traduced英语^ ^)

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); 

,如果我给它一个char或代替一个字一个int这将验证问题,并要求再一个int,如刨这个工程实际上prety,但如果我让这个负数我应该先输入2才能显示消息并再次询问数字,如果我给它一个字符串或范围或范围之外的整数,但是肯定是正确的,那么这将不会发生。

您认为这可能是什么问题?因为我“认为”它只是没关系,关于扫描仪,我应该知道或我失踪?

最佳, 毛

+0

请给输入值和预期输出值 - 就像一个单元测试 – Bohemian 2011-06-11 03:57:15

+0

对不起,是我第一次问在这里,我不是好英语,有什么你的意思是谁?我告诉说,该方法验证了一个int的输入,并且如果它接收到一个字符串或一个字符,它会再次请求这个数字....请更多地解释我,并且我会尽我所能 – Mauricio 2011-06-11 05:05:39

回答

1

负数是有效的整数,不要扔了NumberFormatException异常。因此,您的循环条件评估为true,您的do-while循环再次执行,并且您的扫描器再次要求输入。

,你可以尝试以下方法:

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); 
} 
+0

嗯,我没有想到,但是,这个数字超出范围?是的,他是他,并再次要求,没有告诉我什么!非常感谢!你是个天才!!! – Mauricio 2011-06-11 04:33:14

+0

只是关于你给我的代码的另一个问题,而(真正的)wath是这样做的“真实”,我的意思是,要知道它是真的还是假的,需要什么条件?非常感谢,你在哪里超级有用 – Mauricio 2011-06-11 05:01:41

+0

“真”和“假”是布尔值。所有循环条件都必须评估为布尔值(在您的代码中,您有一个表达式,aux max,其值为布尔值)。因此,“while(true)”是一个无限循环。请注意,在我的代码中,我有一个break语句来终止循环。 – happymeal 2011-06-11 05:07:16