对于循环问题

时间:2013-12-11 21:40:59

标签: java for-loop

我正在尝试创建一个循环,用户为披萨配料输入一些值。他们可以吃意大利辣香肠,菠萝等。当他们输入“完成”时,我希望它能够突破循环。我把这一切都搞定了。它只是我的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;
}

4 个答案:

答案 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
}