![](/img/trans.png)
[英]Java - TestNG : Why does my Assertion always passes when written within try-catch block
[英]Java: Why does try-catch block within a loop executes only once?
下面的程序仅从控制台读取整数并将其打印回去。 当输入非整数(例如char或String)时,扫描程序将引发异常。 我试图在“ try-catch”块中处理异常,然后继续读取下一个输入。 从控制台输入第一个非整数后,程序将进入无限循环。 有人可以帮忙吗?
public class ScannerTest {
static int i=1;
static Scanner sc;
public static void main (String args[]){
sc = new Scanner(System.in);
while (i!=0){
System.out.println("Enter something");
go();
}
}
private static void go(){
try{
i = sc.nextInt();
System.out.println(i);
}catch (Exception e){
System.out.println("Wrong input, try again");
}
}
}
扫描程序无法读取整数时,不会清除输入缓冲区。 因此,假设输入缓冲区包含“ abc”,因为这就是您输入的内容。 对“ nextInt”的调用将失败,但是缓冲区仍将包含“ abc”。 因此,在循环的下一个阶段,“ nextInt”将再次失败!
在异常处理程序中调用sc.next()可以通过从缓冲区中删除不正确的令牌来解决此问题。
使用String:
import java.util.Scanner;
public class ScannerTest {
static int i = 1;
static Scanner sc;
public static void main(String args[]) {
sc = new Scanner(System.in);
while (i != 0) {
System.out.println("Enter something");
go();
}
}
private static void go() {
try {
i = Integer.parseInt(sc.next());
System.out.println(i);
} catch (Exception e) {
System.out.println("Wrong input, try again");
}
}
}
As devnull said take the input from user everytime either in loop or in method,just change the loop to ..and it works fine
1)
while (i!=0){
sc = new Scanner(System.in);
System.out.println("Enter something");
go();
}
2其他方式
private static void go(){
try{ sc = new Scanner(System.in);
i = sc.nextInt();
System.out.println(i);
}catch (Exception e){
System.out.println("Wrong input, try again");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.