2017-10-19 30 views
0

请帮忙弄清楚为什么IntelliJ会给出NullPointerException。无法找到以下值的空值:线程“main”中的异常java.lang.NullPointerException(解决,由布尔值与布尔值引起)

在在 ex3.Hippodrome ex3.Horse.about(Horse.java:16)在ex3.Horse.ride(Horse.java:21)在线程 “主” 显示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正确:p –

回答

2

Boolean是一类,与原始类型boolean相反,当用作字段时,其默认值为null而不是false

这就是为什么isMale将抛出就行了NPE String sex = (isMale) ? "Male" : "Female";

由于@ACVM注意:您可以通过初始化isMalefalse或改变其类型boolean

+0

好的catch,在这种情况下代码应该使用'boolean'基本类型 – ACVM

+0

非常感谢!新的这给了我几个小时试图找出它。 –

+0

@AlexK不客气,如果我的答案解决了您的问题,您可以随时将其标记为已接受 –