我写了一段代码,目的是设置一个整数值。但是,它似乎没有返回正确的值。例如,对于以下输入,我希望它能像这样工作。
请输入正整数值
-458
请输入正有效整数
58个
58
但是,实际输出如下。
请输入正整数值
-458
请输入正有效整数
58个
-458
在此示例中,为什么它会返回-458
而不是58
?
import java.util.InputMismatchException;
import java.util.Scanner;
public class IncorectValueReturned {
public void run() {
System.out.println("Please enter a positive integer value");
System.out.println(setInt());
}
private int setInt() {
int i = -1;
Scanner sc = new Scanner(System.in);
try {
i = sc.nextInt();
if(i < 0) {
System.out.println("Please enter a positive valid integer");
setInt();
}
} catch(InputMismatchException iME) {
System.out.println("Please enter a positive valid integer");
setInt();
}
sc.close();
return i;
}
public static void main(String[] args) {
IncorectValueReturned iVR = new IncorectValueReturned();
iVR.run();
}
}
答案 0 :(得分:1)
您没有从i
分配SetInt()
新值。
if(i < 0) {
System.out.println("Please enter a positive valid integer");
i = setInt(); // <- HERE
}
答案 1 :(得分:1)
您永远不会更改无效的第一个i
,您需要恢复递归调用的值
i = setInt();
当然,你不应该一遍又一遍地重新声明这个扫描仪。 改为使用实例变量。
Scanner sc = new Scanner(System.in);
private int setInt() {
int i = -1;
try {
i = sc.nextInt();
if(i < 0) {
System.out.println("Please enter a positive valid integer");
i = setInt();
}
} catch(InputMismatchException iME) {
//Clear the scanner of this value
sc.next();
System.out.println("Please enter a positive valid integer");
i = setInt();
}
return i;
}
完成后关闭扫描仪。
小心,抛出异常的值将保留在输入中,您需要阅读它,我使用Scanner.next()
删除错误输入,例如大于Integer.MAX_VALUE
的值。