我写了一段短代码,目的是设置一个整数值。但是,它似乎没有返回正确的值。例如,对于以下输入,我希望它像这样工作。
请输入一个正整数
-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();
}
}
最佳答案
您永远不会更改第一个无效的i
,您需要恢复递归调用的值
i = setInt();
当然,您不应该一遍又一遍地声明此扫描仪。
请改用Instance变量。
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
的值。