所以我有一节课
Pizza
:
public class Pizza{
private final int MAX_INGREDIENTS = 5;
private int id;
private String name;
private String description;
private float price;
private PizzaSize size;
private PizzaIngredients[] ingredients;
private int numberOfIngredients;
}
如你所见,我有一个枚举,
PizzaSize
这与这个问题无关。
我还有一个
Ingredients
类别:
public class Ingredients {
private int id;
private String name;
private MeasurementUnits measurementUnits;
private int calories;
}
如你所见,我有一个枚举,
MeasurementUnits
这也与这个问题无关。
最后,我有一个
PizzaIngredients
类别:
public class PizzaIngredients {
private Ingredients ingredients;
private float quantity;
}
所有这些类都有各自的构造函数方法和所有的setter和getter,为了节省空间和增强清晰度,我选择不将它们放在这里。
所以我写了这个方法,通过id从成分集合中删除成分:
public void removeIngredient(int id) {
if (this.numberOfIngredients > 0) {
for(int i = 0; i < this.ingredients.length; i++) {
if (this.ingredients[i] != null && this.ingredients[i].getIngredients().getId() == id) {
ingredients[i] = null;
}
} else {
System.out.println("Pizza has no ingredients!");
}
}
但现在我正在尝试编写不使用and索引的方法
i
,使用
foreach
:
if (this.numberOfIngredients > 0) {
for (PizzaIngredients ing : this.ingredients) {
if (ing.getIngredients().getId() == id) {
ing.setIngredients(null);
}
}
} else {
System.out.println("Pizza has no ingredients!");
}
此方法将成分设置为null,但在打印时,
pizza1.removeIngredient(1);
System.out.println("Removing ingredient test (pizza1): ");
for (PizzaIngredients ingredient : collection1) {
if (ingredient != null) {
System.out.println("ID: " + ingredient.getIngredients().getId() + "| Name: " + ingredient.getIngredients().getName()
+ "| Quantity: " + ingredient.getQuantity() + " " + ingredient.getIngredients().getMeasurementUnits());
}
}
抛出NullPointerException,同时将该方法与索引一起使用,但它没有。为什么会这样?将第二个方法条件更改为
ing = null
它甚至不起作用,它仍然打印成分。