2017-10-19 4 views
0

なぜIntelliJがNullPointerExceptionを返すのか理解してください。 ex3.Hippodromeでex3.Horse.ride(Horse.java:21)で ex3.Horse.about(Horse.java:16)におけるスレッド "メイン" のjava.lang.NullPointerExceptionでnull値を見つけることができません:スレッド "main"の例外java.lang.NullPointerException(解決、ブール代数によるブール代数による)

例外。メイン(Hippodrome.java:19)

クラスの馬:

package ex3; 

public class Horse { 
    String name; 
    int speed; 
    String color; 
    Boolean isMale; 
    int age; 

    void eat(){ 
     System.out.println("eating ... "); 

    } 

    void about(){ 
     String sex = (isMale) ? "Male" : "Female"; // тернарный оператор 
     System.out.printf("name: %s, age: %d, sex: %s", name, age, sex); 
    } 

    void ride(){ 
     about(); 
     System.out.println("riding at speed: " + speed); 


    } 
} 

とクラスヒポドローム:

package ex3; 

import java.util.Random; 

public class Hippodrome { 
    public static void main(String[] args) { 
     Horse[] horses = new Horse[10]; 

     Random random = new Random(); 

     for (int i = 0; i < horses.length; i++) { 
      horses[i] = new Horse(); 
      horses[i].name = "Kon " + i; 
      horses[i].age = 1 + random.nextInt(10); 

     } 

     for (Horse horse : horses) { 
      horse.ride(); 
     } 
    } 
} 
+0

@JuanCarlosMendozaにそのタイプを変更することで、この問題を解決することができますp – ACVM

+0

@ACVM correct:p –

答えて

2

Booleanはクラスであり、プリミティブ型booleanとは対照的に、フィールドとして使用すると、デフォルト値はnullであり、falseではありません。

@ACVMが指摘したように String sex = (isMale) ? "Male" : "Female";

isMaleがライン上でNPEをスローします理由です

:あなたは私は彼がそれ何を知っていると思いますfalseisMaleを初期化するか、boolean

+0

この場合、コードはおそらく 'boolean'プリミティブ型を使用するべきです。 – ACVM

+0

ありがとうございました!私はそれを理解しようとしている時間のカップルを与えられたこれは新しいものです。 –

+0

@AlexK歓迎します。私の答えがあなたの問題を解決した場合、あなたはそれを常に受け​​入れられるとマークすることができます –

関連する問題