如果我输入错误的输入(例如,如果我输入String而不是Integer)循环没有结束,下次不会输入。在这里(下面)我附上整个程序。你能帮忙吗?在此先感谢!!!
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* If we enter the wrong input(example , if we enter sting instead of integer) it goes unending loop
*
* @author Nithish
*
*/
public class Sample2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 1; i++) {
try {
System.out.println("Enter the value");
int obj = scanner.nextInt();
System.out.println(obj);
} catch (InputMismatchException e) {
i--;
e.printStackTrace();
}
}
}
}
答案 0 :(得分:4)
在您正在执行i--的InputMismatchException上,因此修改了循环条件以防止循环在没有所需输入的情况下结束。如果您阅读Scanner.nextInt()的API文档,您应该注意以下事项:
如果翻译成功,扫描仪将超过匹配的输入。
这意味着如果输入无法转换为int,则扫描程序不会前进。因此,在nextInt()的下一次调用中,它将重新读取完全相同的非int输入并再次失败。在尝试再次获取int之前,您需要读取该非整数标记。
答案 1 :(得分:2)
同样,不要弄乱循环内部的循环索引,因为这会导致问题。而是使用一个while循环,它比以前更清洁,更容易调试3个月:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Sample2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean done = false;
int result = 0;
while (!done) {
try {
System.out.print("Enter the value: ");
String temp = scanner.nextLine();
result = Integer.parseInt(temp);
done = true;
} catch (NumberFormatException e) {
System.out.println("Please only enter integer data");
}
}
scanner.close();
}
}
答案 2 :(得分:0)
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
try {
System.out.println("Enter the value");
int obj = scanner.nextInt();
System.out.println(obj);
} catch (InputMismatchException e) {
i--;
//e.printStackTrace();
scanner.nextLine(); //you can add this here.
//scanner.next(); you can also use this
}
}
答案 3 :(得分:0)
下面怎么样?
Scanner sc = new Scanner(System.in);
while (!sc.hasNext()) {
System.out.println("Enter the value");
if (src.hasNextInt()) {
i = src.nextInt();
System.out.println("Thank you! (" + i+ ")");
}
else
{
System.out.println("Please only int");
}
}