既然我可以成功地遍历我的循环可能的有效浇头,我无法在我的程序中添加0.75附加费。我希望你能告诉我为什么会这样。该计划完全在底部。关注我的两个部分是
public class TestPizza
{
public static void main(String args[])
{
int x;
String top[] = {"Mushrooms", "Onions", ""};
Pizza one = new Pizza();
Pizza two = new Pizza();
Pizza three = new Pizza();
one.setSize(12);
one.addTopping(top);
one.showValues();
}
}
并且
// setPrice() assigns a price to the pie
public void addTopping(String programToppings[])
{
for(int x = 0; x < 3; x++)
{
toppings[x] = programToppings[x];
}
for(int x = 0; x < 3; x++)
{
toppings[x] = toppings[x].toLowerCase();
}
for(int x = 0; x < 3; x++)
{
for(int xx = 0; xx < 6; xx++)
{
if(toppings[x].equals(validToppings[xx]))
{price += 0.75;}
}
}
}
我不明白为什么.equals方法不起作用并将奇数的变化分配给最终价格......
// This custom class is used to create Pie objects
// It stores the data about the Pie in four variables:
// size, price, type and baked
// It lets the program that creates the Pie object set these values using four methods:
// setSize, setPrice, setType and bake
public class Pizza
{
// Declare four variables that can store the values for each pie
// Each Pie object will have their own, separate copy of these variables 12.
private int size;
private double price;
private boolean baked;
private int x;
private int xx;
private String validToppings[] = new String[6];
private String toppings[] = new String[3];
// The "constructor" method is called when a new pie
// object is first created. We use it to set "default" values.
// Our typical pie is 10 inches, costs $8 and is not baked yet
// We don't yet know what the pie filling will be
Pizza()
{
size = 8;
price = 10.0;
baked = false;
String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"};
String toppings[] = new String[3];
}
// showValues() is a void method that displays the values of the
// current Pie
public void showValues()
{
System.out.println("Pie Size: " + size);
for(int x = 0; x < 3; x++) {System.out.println("With " + toppings[x]);};
System.out.println("Price of Pie: $" + price);
}
// getSize() returns the size of the pie
public int getSize()
{
return size;
}
// getPrice() returns the price of the pie
public double getPrice()
{
return price;
}
// baked() returns whether or not the pie is baked
public boolean getBaked()
{
return baked;
}
// setSize() assigns a size to the pie
public void setSize(int thisSize)
{
size = thisSize;
switch(size)
{
case 8: price = 10.00; break;
case 12: price = 14.00; break;
case 16: price = 18.00; break;
default: System.out.println("Error in Pizza class: Attempt to set invalid Pizza size."); break;
}
}
// setPrice() assigns a price to the pie
public void addTopping(String programToppings[])
{
for(int x = 0; x < 3; x++)
{
toppings[x] = programToppings[x];
}
for(int x = 0; x < 3; x++)
{
toppings[x] = toppings[x].toLowerCase();
}
for(int x = 0; x < 3; x++)
{
for(int xx = 0; xx < 6; xx++)
{
if(toppings[x].equals(validToppings[xx]))
{price += 0.75;}
}
}
}
public void bake()
{
baked = true;
};
}
答案 0 :(得分:4)
Pizza中的validTopics
实例数组永远不会被填充。替换
String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"};
在Pizza
的构造函数中:
this.validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"};
此外,您的代码中还有许多奇怪的内容:
addTopping
关于顶部迭代的效率相当低addTopping
在for
循环=&gt;中使用(IMO)幻数。 3 Pizza
两次答案 1 :(得分:0)
您的validToppings
数组为空。您正在将每个String比较为null。
您以这种方式声明Pizza
成员:;
private String validToppings[] = new String[6];
private String toppings[] = new String[3];
并且您尝试以这种方式在构造函数中指定值
String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"};
String toppings[] = new String[3];
但是构造函数上面的代码所做的一切都是创建一个新的局部变量,在完成构造函数的执行后会忘记它。
修复方法是为成员分配值。例如,一个可能的正确解决方案如下:
String[] validToppings;
validToppings = {"mushroooms", ... };
从设计的角度来看(你可能是初学者,但仍然值得一提)你应该使用枚举(可以节省你比较字符串,制作拼写错误,......)。
答案 2 :(得分:0)
Pizza()
{
size = 8;
price = 10.0;
baked = false;
String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"};
String toppings[] = new String[3];
}
在这里,
String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"};
是构造函数的本地,无法连接到全局'validToppings []'。看看吧。