使用Java扫描程序无法正常工作的条件

时间:2014-09-14 18:57:57

标签: java

我基本上想知道为什么我的条件语句允许变量指数变为0.0,如果用户输入了-0.5这样的数字。这是我的代码......

    Scanner num2 = new Scanner(System.in);
    System.out.println("Enter an integer value for n: ");

    int temp = 0;

    if(num2.hasNextInt()) {
        temp = num2.nextInt();
        if(temp >= 1.0 ){
            exponent = temp;
        }
        else {
            System.out.println("You have not entered a positive integer value for n.");
            exponent();
        }
    }
    return exponent;

当我将temp分配给nextInt时,会发生奇怪的部分。通过这样做,我希望使以下条件语句按预期工作(对于指数设置,temp必须大于或等于1)。但是,当我调用此函数并放入-0.5时,函数完成并使exponent = 0.在这种情况下,我的目标是使指数大于或等于1.提前感谢!

2 个答案:

答案 0 :(得分:1)

如果您的输入为-0.5,则条件num2.hasNextInt()将为false,下一个执行的指令将为return exponent;,这似乎在此处返回0(我不是&#39 ;不知道为什么你提供的代码不完整。

要正确检查输入是否正确,请尝试以下操作:

if(num2.hasNextInt() && (temp = num2.nextInt()) >= 1) {
    exponent = temp;
}
else {
    System.out.println("You have not entered a positive integer value for n.");
    exponent();
}

编辑:我不知道你的exponent()方法做了什么,但如果方法相同,我还建议使用简单的for循环递归呼叫,如另一个答案中所述。

答案 1 :(得分:0)

您似乎试图以递归方式更改本地值temp。您没有分配temp = exponent();,但我建议您使用基本循环 -

int temp = 0;
while (temp < 1) {
    if (num2.hasNextInt()) { // <-- do we have an int?
      temp = num2.nextInt();
    } else if (num2.hasNext()) { // <-- do we have anything?
      System.err.printf("%s is not an int%n", num2.next());
    } else { // <-- no more input! No valid temp ever received. ERROR and exit.
      System.err.println("No more input");
      System.exit(1);
    }
    System.err.flush();
    if(temp >= 1.0 ){
      exponent = temp;
    } else {
      System.out.println("You have not entered a positive integer value for n.");
      // exponent();
    }
}

如果使用-0.5输出

运行
-0.5 is not an int
You have not entered a positive integer value for n.
相关问题