当用户输入特定字符串时,如何跳出循环?

How do i break out of a loop when the user types in a specific string?

我正在尝试创建两个队列。一个包含男性姓名列表的队列。还有另一个队列,其中包含女性姓名列表。用户必须在姓名前输入性别类型。所以程序应该通过 "m" 或 "f" 知道名称进入哪个队列。当我输入 "m bob" 或 "f jill" 并按回车键时。它打印出语句两次。此外,当我输入 "x done" 时,它不会中断并打印出两个列表。

import java.util.Scanner;

public class UsesArrayBndQueue {
  public static void main(String[] args)
  {
    ArrayUnbndQueue<String> test = new ArrayUnbndQueue<String>();
    ArrayUnbndQueue<String> test2 = new ArrayUnbndQueue<String>();
    boolean NotFull = false;
    Scanner scan = new Scanner(System.in);

   while(true)
    {
      System.out.println("Input a gender and a name (x done to quit):");
     String str1 = scan.next();
      if(str1.contains("x done")){
          break;
      }
     else if(str1.contains("m")){
         test.enqueue(str1);
      }
      else if(str1.contains("f")){
          test2.enqueue(str1);
      }
   }

  while (!test.isEmpty())
    {
      try
      {
        String str1 = test.dequeue();
        System.out.println(str1);
        String str2 = test2.dequeue();
        System.out.println(str2);

      }
      catch(QueueUnderflowException Except)
      {
        System.out.println(Except.getMessage());
      }
    }
  }

}

scan.next() 不接受 space 所以 str1 永远不会是 "x done"

作为替代方案,您可以这样做

 while(true)
    {
      System.out.println("Input a gender and a name (x_done to quit):");
     String str1 = scan.next();
      if(str1.equals("x_done")){
          break;
      }
     else if(str1.equals("m")){
         test.enqueue(scan.next());
      }
      else if(str1.equals("f")){
          test2.enqueue(scan.next());
      }
   }

将循环的退出条件设置为退出循环所需的任何值。

在您的情况下,您可能希望使用 do-while 循环,因为您需要至少循环一次...

boolean keepAsking = true;
do {
    keepAsking = false;
    System.out.println("Input a gender and a name (x done to quit):");
    String str1 = scan.nextLine();
    if(str1.contains("x done")){
    }
    else if(str1.contains("m")){
         test.enqueue(str1);
    }
    else if(str1.contains("f")){
        test2.enqueue(str1);
    } else {
        keepAsking = true;
    }
} while (keepAsking);

你也应该使用Scanner#nextLine,否则你只会得到下一个完整的单词(由space分隔)

除了提供的解决方案之外..确保使用大小写转换或 equalsIgnoreCase 进行比较以确保逻辑正常工作..