因此,对于我的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] + ")")};
}
答案 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);