需要迭代两个项目数组以进行比较而无需并行

时间:2012-04-23 04:41:11

标签: java arrays iteration

因此,对于我的java类,我必须编写一个接受浇头的程序,并为每个顶部增加75美分的总价。由于这个错误,我还没有因为空测试而烦恼。基本上我会:

list1 = Valid Toppings
list2 = User Toppings

用户浇头可以按任何顺序输入,因此将它们作为并行数组匹配没有任何意义。您可以在下面的代码段中看到我使用的逻辑,但它不合法。当我尝试编译时,我的终端在任何地方呕吐。我将如何实现下面的逻辑,或者更完整地实现我的逻辑?

  for(x = 0; toppings.length < 3; x++)
    {
      if(toppings[x].equals(for(xx = 0; validToppings[0].length < 3; xx++) {validToppings[xx]})
        {setSize(size); price += .75;}
        else
        {System.out.println("Error in Pizza class: Attempt to set invalid pizza topping" + x + "(" + toppings[x] + ")")};
    }

5 个答案:

答案 0 :(得分:1)

这里的问题是你试图使用一个if语句,它做一个布尔比较,到一个for语句,不能把它作为一个布尔值。

请改为:

for(int x = 0; topping.length < 3; x++){
         for(int xx = 0; vaildToppings[0].length < 3; xx++){
             if(toppings[x].equals(validToppings[xx]){
//do stuff
     }
}

嵌套for循环是你的朋友。

topping.length&lt; 3因为你关闭的条件也是非荒谬的。考虑重新审视你的逻辑,我不知道你究竟想做什么,所以我不打算做任何假设。

答案 1 :(得分:0)

您的代码破解的原因是因为您有toppings.length&lt; 3和validToppings [0] .length&lt; 3当你想要的时候,大概是x&lt; 3或x&lt; toppings.length

for循环中的所有内容都应基于您的计数器。

答案 2 :(得分:0)

试试这个:

for (int x = 0; x < toppings.length; x++)
{
    if (!validToppings.contains(toppings[x]))
    {
        //throw some error, or print a message, etc....
    }
    else
    {
        //do stuff
    }
}

答案 3 :(得分:0)

嵌套的for循环是正确的方法。不要忘记在循环本身(或其他地方,如果你想使用C风格)声明循环计数器的类型,否则你整天都会遇到编译错误。

for(int x = 0; x < toppings.length; x++) {
    for(int xx = 0; xx < validToppings[0].length; xx++) {
        if(toppings[x].equals(validToppings[xx]) {
            // Perform operations here.
    }
}

作为旁注:toppings.length < 3在整个循环中可能是也可能不是真的;它永远不会是真的,因此导致循环不执行,或者它可能是真的,导致无限循环,无论x还是xx。对这种情况要小心。

答案 4 :(得分:0)

我不确定你要做什么。如果您正在尝试测试一个字符串数组是否在另一个字符串数组中(例如,Set Theory中的“子集”)。那么为什么不使用ArrayList,类似这样的事情:(对不起,如果我的语法有点偏离,那我已经做了一段时间了)

ArrayList<String> toppings = new ArrayList<>();
toppings.add("Pepperoni");
toppings.add("Olives");

ArrayList<String> validToppings = new ArrayList<>();
validToppings.add("Pepperoni");
validToppings.add("Salami");
validToppings.add("Olives");
validToppings.add("Cheese");

boolean toppingsValid = validToppings.containsAll(toppings);