当用户键入特定字符串时,如何突破循环?

时间:2015-02-17 23:37:06

标签: java string while-loop queue

我正在尝试创建两个队列。一个包含男性名字列表的队列。另一个队列中有一个女性名单。用户必须在名称前键入性别类型。所以该程序应该通过“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());
      }
    }
  }

}

3 个答案:

答案 0 :(得分:1)

scan.next()不占用空间,因此str1将永远不会&#34; x完成&#34;

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

 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());
      }
   }

答案 1 :(得分:0)

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

在您的情况下,您可能需要使用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,否则你只能得到下一个字(由空格分隔)

答案 2 :(得分:0)

除了提供的解决方案..确保您使用Case转换或equalsIgnoreCase进行比较以正确处理逻辑..