访问初始化对象的内部Object属性时出现NullPointerException

时间:2017-08-08 10:25:30

标签: java oop nullpointerexception

我有两个班级,Car和Tire,有以下功能。

胎:

public static class Tire{

  public boolean isBroken;
  public int milesLeft;

  public Tire(){
    isBroken = false;
    milesLeft = 100;
  }

  public void copyTire(Tire anotherTire){
    isBroken = anotherTire.isBroken;
    milesLeft = anotherTire.milesLeft;
  }

  public int getMilesLeft(){
    return milesLeft;
  }
}

汽车

public static class Car{

  public boolean maintenance;
  public String name;
  public Tire tires[] = new Tire[MAX_TIRES];
  public Tire LF = new Tire();

  public Car(String name){
    maintenance = false;
    this.name = name;
  }

  public String getName(){
    return name;
  }
}

我的问题是我想从汽车阵列的所有轮胎上打印信息(milesLeft)。我认为它只是通过使用for循环工作,但它没有,我不知道为什么。

这就是我的尝试:

for(int i = 0; i < MAX_TIRES; i++){
   System.out.println("Tire nº"+i+": "+ i20.tires[i].getMilesLeft());
}

在印刷唯一的轮胎时,我们在车上的LF,没有问题。

你可能看到的任何其他错误都写了它们,我已经研究过c ++,但我从Java开始。

编辑:

错误:

线程中的异常&#34; main&#34;显示java.lang.NullPointerException         在vehicles.main(vehicles.java:56)

使用&#39; main&#39;功能

public static void main(String []args) { 
 Car i20 = new Car("i20");

 System.out.println("The name is " + i20.getName());
 System.out.println("The tires' status right now is:");
 for(int i = 0; i < MAX_TIRES; i++){
    System.out.println("Tire nº"+i+": "+ i20.tires[i].getMilesLeft());
 }
}

1 个答案:

答案 0 :(得分:2)

  

我认为在制造新车时,它也会制造轮胎

计算机很愚蠢。你没有告诉它在创建汽车时创造轮胎,所以它没有为你做。这就是为什么当你试图进入轮胎时,会抛出NullPointerException。轮胎尚未创建!

创建汽车后,还要创建轮胎:

Car i20 = new Car("i20");
for (int i = 0 ; i < i20.tires.length l i++) {
    i20.tires[i] = new Trie();
}

现在轮胎已经创建了。然后你可以使用for循环打印轮胎。

您也可以将此轮胎创建代码放在构造函数中。您的Car类'构造函数可能如下所示:

public Car(String name){
    maintenance = false;
    this.name = name;
    for (int i = 0 ; i < this.tires.length ; i++) {
        this.tires[i] = new Tire();
    }
}