来自另一个 class 的 Getter 不适用于 ArrayList
Getter from another class doesn't work on ArrayList
所以我一直在思考为什么我的代码不起作用。我有 2 个 classes,第一个是我的 getter 和 setter:
public class ShopItems {
private String itemName;
private double price;
public double getPrice(){
return price;
}
public String getItemName(){
return itemName;
}
private void setPrice(p){
price = Math.abs(p);
}
public ShopItems(String i, double p){
itemName = i.toUpperCase();
setPrice(p);
}
}
这是我的第二个 class,我在这里制作了一个 ArrayList:
public class ShopLedger {
private ArrayList<ShopItems> shoppingList;
//I want to make a deep copy of the items in the parameter into shopping list.
public ShopLedger(ArrayList<ShopItems> s){
shoppingList = new ArrayList<ShopItems> (s);
for(int i=0;i<s.size();i++){
shoppingList.set(i,s.get(i));
}
}
//And here is where things go wrong. I want the method to return the price of the item
//in the parameter, and return null if the item name cannot be found.
public Double getPrice(String itemName) {
for(int i=0;i<shoppingList.size();i++){
if(shoppingList.get(i).getItemName() == itemName){
return shoppingList.get(i).getPrice();
}
}
return null;
}
}
这就是我现在所拥有的,代码一直给我错误 "java.lang.NullPointerException"。我的客户 class 将购物清单设置为:
Candy(2.3), Book(20.0), Pens(5.5), Tape(10.2)
itemName 是 Pens
。
但是,我已经进入调试模式,出于某种原因,getPrice 方法的这一部分:
if(shoppingList.get(i).getItemName() == itemName){
return shoppingList.get(i).getPrice();
}
从不执行。请帮忙!
我发现了这个问题,感谢一位名叫 Ajris 的用户,他指出我应该在我的 if 语句中使用 shoppingList.get(i).getItemName().equals(itemName)
而不是 shoppingList.get(i).getItemName() == itemName
您将 String 与 ==
进行比较
使用等于()。 "aaaa".equals("aaaa");
您可能想要使用 equals()。
if(shoppingList.get(i).getItemName().equals(itemName){
return shoppingList.get(i).getPrice();
}
所以我一直在思考为什么我的代码不起作用。我有 2 个 classes,第一个是我的 getter 和 setter:
public class ShopItems {
private String itemName;
private double price;
public double getPrice(){
return price;
}
public String getItemName(){
return itemName;
}
private void setPrice(p){
price = Math.abs(p);
}
public ShopItems(String i, double p){
itemName = i.toUpperCase();
setPrice(p);
}
}
这是我的第二个 class,我在这里制作了一个 ArrayList:
public class ShopLedger {
private ArrayList<ShopItems> shoppingList;
//I want to make a deep copy of the items in the parameter into shopping list.
public ShopLedger(ArrayList<ShopItems> s){
shoppingList = new ArrayList<ShopItems> (s);
for(int i=0;i<s.size();i++){
shoppingList.set(i,s.get(i));
}
}
//And here is where things go wrong. I want the method to return the price of the item
//in the parameter, and return null if the item name cannot be found.
public Double getPrice(String itemName) {
for(int i=0;i<shoppingList.size();i++){
if(shoppingList.get(i).getItemName() == itemName){
return shoppingList.get(i).getPrice();
}
}
return null;
}
}
这就是我现在所拥有的,代码一直给我错误 "java.lang.NullPointerException"。我的客户 class 将购物清单设置为:
Candy(2.3), Book(20.0), Pens(5.5), Tape(10.2)
itemName 是 Pens
。
但是,我已经进入调试模式,出于某种原因,getPrice 方法的这一部分:
if(shoppingList.get(i).getItemName() == itemName){
return shoppingList.get(i).getPrice();
}
从不执行。请帮忙!
我发现了这个问题,感谢一位名叫 Ajris 的用户,他指出我应该在我的 if 语句中使用 shoppingList.get(i).getItemName().equals(itemName)
而不是 shoppingList.get(i).getItemName() == itemName
您将 String 与 ==
进行比较使用等于()。 "aaaa".equals("aaaa");
您可能想要使用 equals()。
if(shoppingList.get(i).getItemName().equals(itemName){
return shoppingList.get(i).getPrice();
}