Java中for循环的输入验证[已关闭]

jgovgodb  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(108)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
我的程序有一个名为answers的数组,它包含20个元素。我有一个for循环,它提示用户输入A、B、C或D,然后将该输入添加到数组中。我一直在尝试使用嵌套在for循环中的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") == false || input.equals("B") == false || input.equals("C") ==   false || input.equals("D") == false)
         {
            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; 
      }

字符串
我决定使用字符串数组,因为我不知道如何用其他方法来做,但我想知道问题是否来自在while循环中误用.equals方法。
每次我运行程序时,它看起来像这样:

Enter your answer for problem #1: A
You must enter either A, B, C, or D.
Please reenter your answer for problem #1:


正如您所看到的,即使输入是有效的,它也会提示用户重新输入答案。我已经在这方面工作了这么长时间,我仍然不知道如何解决它!

ecfdbz9o

ecfdbz9o1#

把你的“或”逻辑改成“和”逻辑。
你的while条件总是为真,因为输入只能是其中一个字符,但必须是 * 所有 * 字符(即不可能)的总条件为真。
还有,这个表情

input.equals("A") == false

字符串
可以(并且应该)更改为

!input.equals("A")


以减少代码混乱,使其更易于阅读。
那就试试吧

while (!input.equals("A") &&
  !input.equals("B") &&
  !input.equals("C") &&
  !input.equals("D")) {


顺便说一句,一个更简单的编码方法是:

while (!input.matches("[ABCD]") {

相关问题