2017-08-08 9 views
0

私はCarとTireの2つのクラスを以下の関数でもっています。初期化されたオブジェクトの内部Object属性にアクセスする際の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を使い始めています。

EDIT:

エラー:

スレッドの例外vehicles.mainで "主" java.lang.NullPointerExceptionが (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

スレッド "main"の例外java.lang.NullPointerException vehicles.main(vehicles.java:56)エラー。そして、car:Car i20 = new Car( "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

私は感謝の言葉ではないと思いますが、私はまだ投票できません。これが解決策です。私は馬鹿だと感じる。 –

関連する問題