2017-08-08 77 views
0

我有两个类Car和Tire,它们具有以下功能。当访问初始化对象的内部对象属性时出现NullPointerException

轮胎:

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开始。

编辑:

错误:螺纹

异常 “主” 显示java.lang.NullPointerException 在vehicles.main(vehicles.java:56)

与汽车的声明'主功能。

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()); 
} 
} 
+0

什么是错误? –

+0

迭代之前是否将任何轮胎添加到阵列? – daniu

+0

线程“主”java.lang.NullPointerException异常在vehicles.main(vehicles.java:56)错误。和汽车:汽车i20 =新车(“i20”);我认为在创造新车时,它也会创造轮胎。 –

回答

2

I thought that when creating a new car, it would create the tires too

电脑是愚蠢的。每当创建汽车时,你都没有告诉它创造轮胎,所以它没有为你做。这就是为什么当您尝试使用轮胎时,会抛出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(); 
    } 
} 
+1

我知道我不应该说谢谢,但我还不能投票。这是解决方案。我觉得我好笨。 –