Java循环内输入验证异常:合法输入仍触发重新输入提示
问题解决:输入合法性校验的逻辑错误
你的问题出在while循环的条件判断上,错误使用了||(逻辑或)运算符,导致合法输入也会触发循环。
错误原因分析
当输入"A"时:
input.equals("A") == false→ 结果为falseinput.equals("B") == false→ 结果为trueinput.equals("C") == false→ 结果为trueinput.equals("D") == false→ 结果为true
||运算符只要任一条件为true,整个表达式就会判定为true,所以即便输入合法内容,while循环仍会执行错误提示逻辑。正确逻辑应该是:只有当输入既不是A、也不是B、也不是C、也不是D时,才进入循环要求重新输入,这时候需要用&&(逻辑与)连接所有判断条件。
修正后的代码
String[] answers = new String[20]; //empty array for the student's answers String input; //keyboard input Scanner keyboard = new Scanner(System.in); //prompt user for input and check if it's valid //if it is, add input to the array for (int i = 0; i < 20; i++) { System.out.print("Enter your answer for problem #" + (i + 1) + ": "); input = keyboard.nextLine(); while (!input.equals("A") && !input.equals("B") && !input.equals("C") && !input.equals("D")) { System.out.println("You must enter either A, B, C, or D."); System.out.print("Please reenter your answer for problem #" + (i + 1) + ": "); input = keyboard.nextLine(); } answers[i] = input; }
额外优化建议
如果要支持大小写不敏感的输入(比如"a"也能通过校验),可以把equals替换为equalsIgnoreCase:
while (!input.equalsIgnoreCase("A") && !input.equalsIgnoreCase("B") && !input.equalsIgnoreCase("C") && !input.equalsIgnoreCase("D"))
或者将合法选项存入集合,让判断逻辑更简洁:
import java.util.Arrays; import java.util.HashSet; import java.util.Set; // ... 其他代码不变 Set<String> validAnswers = new HashSet<>(Arrays.asList("A", "B", "C", "D")); for (int i = 0; i < 20; i++) { System.out.print("Enter your answer for problem #" + (i + 1) + ": "); input = keyboard.nextLine(); while (!validAnswers.contains(input.toUpperCase())) { System.out.println("You must enter either A, B, C, or D."); System.out.print("Please reenter your answer for problem #" + (i + 1) + ": "); input = keyboard.nextLine(); } answers[i] = input; }
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

