for循环中加入has判断 就挑跳不出来了,求大佬解答 下面是代码 package shopping; import java.util.Scanner; public class jieMian { public static void main(String[] args) { denglu(); } public static void denglu() { //声明 String name = "admin"; int num = 123; int a; System.out.println("\t\t欢迎使用我行我素购物管理系统!"); System.out.println("\t\t1.登录系统"); System.out.println("\t\t2.退出"); System.out.println("***************************************"); Scanner input = new Scanner(System.in); for (; ; ) { System.out.println("请选择,输入数字:"); if (input.hasNextInt()) { a = input.nextInt(); if (a == 1) { for (; ; ) { System.out.println("请输入账号:"); String name1 = input.next(); System.out.println("请输入密码:"); int num1 = input.nextInt(); if (name1.equals(name) && num1 == num) { break; } else { System.out.println("用户名密码错误,请重新输入!"); } } break; } else if (a == 2) { System.out.println("欢迎下次光临!"); break; } else { System.out.println("输入错误,请重新输入!"); } } else { System.out.println("输入错误,请重新输入!"); continue; } } } }
通过断点调试是可以看出这个问题,如果想继续输入,可以在改成这种方式
else { System.out.println("输入错误,请重新输入!");
input = new Scanner(System.in); continue; }
你的hasNextInt在输入字符串后,判断为false,后续的hasNext就会一直为false,你的input会一直是has这个字符
import java.util.Scanner;
/**
* <p>
* 解决for循环中加入has判断跳不出来问题
* </p>
*
* @author : zhengqing
* @description : 通过`input.nextLine();`解决; TODO 注意异常控制! ex: input.nextInt()
* @date : 2021/1/15 13:48
*/
public class Problem_01 {
public static void main(String[] args) {
String username = "admin";
int password = 123;
int result;
System.out.println("\t\t欢迎使用我行我素购物管理系统!");
System.out.println("\t\t1.登录系统");
System.out.println("\t\t2.退出");
System.out.println("***************************************");
Scanner input = new Scanner(System.in);
boolean flag = true;
while (flag) {
System.out.println("请选择,输入数字:");
boolean inputContent = input.hasNextInt();
if (!inputContent) {
System.out.println("输入错误,请重新输入!");
input.nextLine();
}
if (inputContent) {
result = input.nextInt();
switch (result) {
case 1:
for (;;) {
System.out.println("请输入账号:");
String usernameByInput = input.next();
System.out.println("请输入密码:");
int passwordByInput = input.nextInt();
if (usernameByInput.equals(username) && passwordByInput == password) {
flag = false;
System.out.println("登录成功...");
break;
} else {
System.out.println("用户名密码错误,请重新输入!");
input.nextLine();
}
}
break;
case 2:
System.out.println("欢迎下次光临!");
flag = false;
break;
default:
System.out.println("输入错误,请重新输入!");
input.nextLine();
break;
}
}
}
}
}
运行过了,代码没毛病,你说什么跳不出来
输入字符串后hasNextInt是false会调用else,然后之前输出的东西还在输入流里没有被消耗掉
所以循环后调用hasNextInt不会让你输出新的值,而是把原本字符串值直接哪来判断,所以造成死循环
只要把错误的值消耗掉就行了
if (input.hasNextInt()) {
...............
} else {
// 读取之前输入的值
String b = input.next();
System.out.println("输入错误,请重新输入!");
continue;
}