我有一个对象,它有一个名字,String[]。还有另一个String数组,只存储主函数中该对象的名称(第一个参数)。
import java.util.*;
class Dice{
public String [] side;
public String name;
public Dice (String n, String ... a){
name = n;
side = a;
}
//Setter and Getter name
public String getName(){
return name;
}
public void setName(String n){
name = n;
}
}
对象的参数在主类中设置。
Dice easy = new Dice("绿色:","脑子","脑子","脑子","脚印","脚印","霰弹枪");
字符串数组只存储名称Easy:
。
我正在尝试通过将它们传递到主方法中的方法来比较这两个数组。
//Removeing the 3 dice which were picked form the cup of the current player
public static Dice [] cup(Dice [] a , String [] b){
Dice [] currentCup = new Dice[a.length];
for (int i = 0; i < b.length; i++) {
if (b[i] == a[i].getName()) {
currentCup[i].setName("");
}
}
return currentCup;
}
如果对象的名称等于字符串数组中的名称,则对象的名称应该为空字符串(" ")。
我遇到了一个错误。
Exception in thread "main" java.lang.NullPointerException
我知道在这里使用ArrayList更好,因为我可以使用 .remove(i, elem)。但我不知道如何将一个ArrayList传递给构造函数。
此外,这只是我使用数组进行练习。
结果应该是,如果Dice[].getName()等于“easy”,那个Dice对象的名称应该为空字符串" "。
NullPointerException
(简称NPE)意味着您正在尝试访问空对象引用的成员(方法或公共属性)。哪一行代码抛出了NPE?尝试使用调试器逐步执行代码以查看哪里为空。您的问题与设置和比较无关,您只是没有初始化所有内容。 - Taylorcup
方法中,你创建了一个新数组currentCup
,然后返回它而没有修改它。这意味着它将只是一个全为null的数组。因此,在调试代码时要注意这个问题。 - Jordan