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