当用户输入特定字符串时,如何跳出循环?
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 进行比较以确保逻辑正常工作..
我正在尝试创建两个队列。一个包含男性姓名列表的队列。还有另一个队列,其中包含女性姓名列表。用户必须在姓名前输入性别类型。所以程序应该通过 "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 进行比较以确保逻辑正常工作..