在下面的代码中,我试图在输入上实现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;
是的,我知道我不应该使用私人静态来做这件事,但我真的不能想到另一种选择。
答案 0 :(得分:2)
您的while循环中没有任何break
或return
,因此唯一可以完成的方法是条件为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();
}