我正在尝试创建一个循环,用户为披萨配料输入一些值。他们可以吃意大利辣香肠,菠萝等。当他们输入“完成”时,我希望它能够突破循环。我把这一切都搞定了。它只是我的for循环,这是问题。我有4个披萨打顶,所以很自然地我把它圈了4次。但是如果用户键入了错误的值,则会占用我的4个循环中的一个。现在我可以将计数器设置为200,这样他们很可能不会多次出错。但我希望有一个更清洁的版本。所以它会一直提示用户,直到键入“完成”。我尝试使用while循环,并在其中嵌入do-while。像
这样的东西 while( size != "done")
但这也不起作用。我的代码:
public List<String> Input(){
List<String> toppings = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
String size;
System.out.println("What pizza toppings; Pepperoni, Fungi, Pineapple or Bacon, type 'done' when your finished: ");
FORLOOP: for(int i = 0; i < 4 ; i++){
do {
size = sc.next();
if ( size.equalsIgnoreCase( "Pepperoni") || size.equalsIgnoreCase( "Fungi" ) || size.equalsIgnoreCase( "pineapple" ) || size.equalsIgnoreCase( "bacon" )) {
toppings.add(size);
} else if( size.equalsIgnoreCase( "done" ) ){
break FORLOOP;
}
else{
System.out.print("Choose either 'Pepperoni', 'Fungi', 'bacon' or 'pineapple' Toppings, type 'done' when finshed: ");
}
} while ( false );
}
return toppings;
}
答案 0 :(得分:1)
int cnt = 0;
while(cnt < 4){
size = sc.next();
if ( size.equalsIgnoreCase( "Pepperoni") || size.equalsIgnoreCase( "Fungi" ) || size.equalsIgnoreCase( "pineapple" ) || size.equalsIgnoreCase( "bacon" )) {
toppings.add(size);
cnt++;
} else if( size.equalsIgnoreCase( "done" ) ){
break;
}
else{
System.out.print("Choose either 'Pepperoni', 'Fungi', 'bacon' or 'pineapple' Toppings, type 'done' when finshed: ");
}
}
答案 1 :(得分:1)
这样的事情?
while (toppings.size() < 4){
size = sc.next();
if ( size.equalsIgnoreCase( "Pepperoni") || size.equalsIgnoreCase( "Fungi" ) || size.equalsIgnoreCase( "pineapple" ) || size.equalsIgnoreCase( "bacon" )) {
toppings.add(size);
}
else if( size.equalsIgnoreCase( "done" ) )
{
break; //single depth. just break the while
}
else
{
System.out.print("Choose either 'Pepperoni', 'Fungi', 'bacon' or 'pineapple' Toppings, type 'done' when finshed: ");
}
}
(自己为'完成'添加休息,但对象很清楚。 *只需要保护你实际需要的东西。就像我在这里做的arraylist的大小。你可以使用如果你得到“ow noes,不要重新检查循环中的大小”振动,请计数:))
*添加了休息。
答案 2 :(得分:0)
您根本不需要外部for
循环或FORLOOP
标签。然后只需将while
条件更改为true
,这样它就会永远循环,直到您在用户输入“完成”时明确break;
。实际上,您可以简单break
代替return toppings
。
如果您担心用户输入相同的顶部两次,那么将配件放在Set
- LinkedHashSet
中将保留顺序 - 而不是List
,或者在向列表中添加!toppings.contains(size)
之前检查size
。顺便说一下,为了清楚起见,您可能希望将size
重命名为topping
。
答案 3 :(得分:0)
bool wantMoreToppings = true;
bool shouldTakeMoreToppings = true;
while(wantMoreToppings && shouldTakeMoreToppings)
{
String newTopping = sc.next();
if ( newTopping.equalsIgnoreCase( "Pepperoni") ||
newTopping.equalsIgnoreCase( "Fungi" ) ||
newTopping.equalsIgnoreCase( "pineapple" ) ||
newTopping.equalsIgnoreCase( "bacon" ))
{
if(!toppings.contains(newTopping))//change this if you allow double toppings
{
toppings.add(newTopping);
}
}
else
{
wantMoreToppings = !newTopping.equalsIgnoreCase("done")
}
shouldTakeMoreToppings = toppings.size() < 4;//change this if you allow double toppings toppings
}