Java 循环遍历类中的对象数组
我在类内循环一个包含对象的数组时遇到了一些问题。我在这里写了一个小演示,以便您可以遵循:Java 循环遍历类中的对象数组,java,Java,我在类内循环一个包含对象的数组时遇到了一些问题。我在这里写了一个小演示,以便您可以遵循: Tank tanks[] = new Tank[2]; tanks[0] = new Tank(); tanks[1] = new Tank(); tanks[0].doStuff(tanks); doStuff(Tank[] tanks) { for (int i = 0; i < tanks.length; i++) { if (tanks[i].equals(this)
Tank tanks[] = new Tank[2];
tanks[0] = new Tank();
tanks[1] = new Tank();
tanks[0].doStuff(tanks);
doStuff(Tank[] tanks) {
for (int i = 0; i < tanks.length; i++) {
if (tanks[i].equals(this)) continue;
// Do stuff
}
}
储罐[]=新储罐[2];
储罐[0]=新储罐();
储罐[1]=新储罐();
储罐[0]。doStuff(储罐);
doStuff(储罐[]储罐){
对于(int i=0;i
所以,我有一个坦克类型的阵列。然后在Tank类中调用doStuff方法。该方法获取数组并在其中循环。然后我想对每个不是类的当前实例的坦克做一些事情。我希望你能理解我的代码和描述
问题是我得到了if(tanks[I].equals(this))的nullPointerException
我做错了什么?这意味着
tanks[I]
为空。(或者您重写的equals()
方法有错误)
您需要对此进行检查。当我运行此代码时:
public class Tank {
public static void main(String[] args) {
Tank tanks[] = new Tank[2];
tanks[0] = new Tank();
tanks[1] = new Tank();
tanks[0].doStuff(tanks);
}
public void doStuff(Tank[] tanks) {
for (int i = 0; i < tanks.length; i++) {
if (tanks[i].equals(this)) continue;
// Do stuff
}
}
}
公共级储罐{
公共静态void main(字符串[]args){
储罐[]=新储罐[2];
储罐[0]=新储罐();
储罐[1]=新储罐();
储罐[0]。doStuff(储罐);
}
公共排水管(储罐[]储罐){
对于(int i=0;i
没有错误发生。因此,您可能已经重写了
.equals
,这就是发生NullPointerException
的地方。另一种可能是,您的简单示例无法准确反映错误发生的位置。如果要比较对象的ID,可以使用==
而不是.equals()
doStuff(储罐){
对于(int i=0;i
更可能是后者,因为所提供的代码相对基本。@AnthonyGrist:鉴于所提供的代码不会编译(即使在经过静默编辑后),我强烈怀疑它不能代表正在运行的真实代码。由于您试图处理单个值,该代码无论如何也不会编译(储罐
)作为数组。请编辑您的问题,以提供一个简短但完整的程序来演示问题。您重新实现了equals方法吗?如果是,您可以显示它吗?这是我认为这个空值可能来自的唯一地方,但前提是您重新实现了它并做了一些错误的事情。其余的都是干净的。@jonsket您可以使用该语法来创建一个数组。这很奇怪,但他用变量名将其声明为数组。@RalfHoppen:代码已被编辑。原始声明有doStuff(Tank tanks)
。我担心的不是调用站点,而是方法声明。(它仍然不是一个有效的声明,因为它没有返回类型,但是我前面提到的错误已经被修复了。)一个简短但完整的程序来演示这个问题仍然是更好的。。。
doStuff(Tank tanks) {
for (int i = 0; i < tanks.length; i++) {
if (tanks[i] == this) {
continue;
}
// Do stuff
}
}