【问题标题】:Strange behaviour in Scanner with negative numbers in javaJava中带有负数的扫描仪中的奇怪行为
【发布时间】:2011-06-11 12:22:33
【问题描述】:

我试图找到答案,但找不到,也许我要问的问题有点奇怪,我想知道这里出了什么问题。 (对不起我的英语,它有点差,但我会尽力而为)

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

嗯,这个方法像这样使用 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);

如果我给它一个 char 或一个单词而不是一个 int,这将验证问题,并将再次要求一个 int,这实际上按计划工作,但如果我给它一个 负数 我应该在它之前输入 2 以显示消息并再次询问数字,如果我给它一个 char 字符串或一个范围或范围外的 int 但蜜蜂是积极的,这不会发生。

您认为这里可能存在什么问题?因为我“认为”没关系,关于 Scanner 的一些我应该知道或我错过的东西??

最好, 毛里西奥

【问题讨论】:

  • 请给出输入值和预期输出值 - 就像单元测试一样
  • 对不起,我是第一次在这里问,而且我的英语不太好,你是什么意思?我告诉该方法验证一个 int 的输入,如果它收到一个字符串或一个字符,它将再次询问该数字....请解释一下,我会尽力而为

标签: java java.util.scanner


【解决方案1】:

负数是有效整数,不会抛出 NumberFormatException。因此,您的循环条件评估为 true,并且您的 do-while 循环再次执行,并且您的 Scanner 再次要求输入。

您可以尝试以下方法:

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

【讨论】:

  • 嗯嗯我没想到,但是,这个数字超出范围?是的,他是他,然后又问了一遍,却什么也没告诉我!多谢!你真是个天才!!!
  • 关于你给我的代码的另一个问题,while(true) wath 我的意思是这个“真”,需要什么条件才能知道它是真还是假?非常感谢,你非常有帮助
  • "true" 和 "false" 是布尔值。所有循环条件都必须计算为布尔值(在您的代码中,您有一个表达式 aux max,计算结果为布尔值)。因此,“while(true)”是一个无限循环。请注意,在我的代码中,我有一个 break 语句来终止循环。
  • 好的,再次感谢,我想我们以不同的方式学习这一点,因为我们刚刚开始使用 java 和编程 ^.^ 但我明白你在说什么,只是我们从不认为它会起作用这样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2021-01-14
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多