我基本上想知道为什么我的条件语句允许变量指数变为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.提前感谢!
答案 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.