尝试抓住不工作 - 为什么?

时间:2018-06-03 07:47:48

标签: java

在下面的代码中,我试图在输入上实现try-catch。当while循环未被使用时,这可以作为独立工作。这并没有实现我想要做的事情,所以我尝试了循环。然后这会产生一个无限循环,我不明白为什么。

public static void AllIn() {
    System.out.println("Please select your menu option: ");
    while(true) {
        try {
            MenuSelect = Input.nextInt();           
        }
        catch (InputMismatchException e) {
            System.out.println("That's not a valid number!");
        }
    }

 }

我认为可能有用的另一个解决方案是通过catch块中的另一个方法调用此方法。这创建了一个循环,以返回StackOverflowError结束。有没有人建议如何让它发挥作用?

我与之合作的变量是:

private static Scanner Input = new Scanner(System.in); 
private static int MenuSelect;

是的,我知道我不应该使用私人静态来做这件事,但我真的不能想到另一种选择。

2 个答案:

答案 0 :(得分:2)

您的while循环中没有任何breakreturn,因此唯一可以完成的方法是条件为false。但它的条件是true所以它不会是假的。这会产生无限循环。

还有另一个原因。当扫描程序读取无效的int时,它不会超过这些字符。这意味着下次扫描程序尝试读取它时,无效的int仍然存在,并且它将尝试读取它失败的那个,并且这一直在继续。

如果输入正常,则一个解决方案是break,如果失败则使用int:

System.out.println("Please select your menu option: ");
while(true) {
    try {
        MenuSelect = Input.nextInt();   
        break;        
    }
    catch (InputMismatchException e) {
        System.out.println("That's not a valid number!");
        Input.nextLine(); // consumes the invalid int.
    }
}
// do stuff with the input here...

答案 1 :(得分:1)

if(isset($_POST['submit'])){

    $name = $_POST['name'];
    $email = $_POST['email'];

    $login = "SELECT FROM register WHERE name='".$name."' AND email= '".$email."'  ";
    $run = mysqli_query( $con, $login );
    if ( mysqli_num_rows($run)>0 ) {
        echo "<script>alert('Logged In Successfully'); </script>";
    }

    exit();
}