Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环遍历类中的对象数组_Java - Fatal编程技术网

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
  }
}