2013-03-14 64 views
0
package blurbProject; 
import java.util.Random; 
import java.util.Scanner; 

public class BlurbMaker 
{ 
Random generator = new Random(); //"Random" number generator for the Whatzits 

public BlurbMaker()//constructor 
{ 
    generator = null; 
}//close constructor 

public BlurbMaker(Random iniGenerator)//initialize constructor 
{ 
    generator = iniGenerator; 
}//close initialization 

private String getWhoozitYs(){ 
    StringBuffer sb = new StringBuffer(); 
    boolean stop = generator.nextBoolean(); //NullPointerException here 
    if(stop == true) 
    { 
     sb.append("y"); 
     getWhoozitYs(); 
    } 
    return sb.toString(); 
} 

private String getWhozit() 
{ 
    StringBuffer sb = new StringBuffer(); 
    sb.append("x"); 
    sb.append(getWhoozitYs()); //NullPointerException here 
    return sb.toString(); 
} 

private String getWhatzit() 
{ 
    StringBuffer sb = new StringBuffer(); 
    sb.append("q"); 
    boolean stop = generator.nextBoolean(); 
    if(stop == true) 
    { 
     sb.append("z"); 
    } 
    else 
    { 
     sb.append("d"); 
    } 
    sb.append(getWhozit()); //NullPointerException here 
    return sb.toString(); 
} 

private String getMultipleWhatzits() 
{ 
    StringBuffer sb = new StringBuffer(); 
    sb.append(getWhatzit()); 
    boolean stop = generator.nextBoolean(); 
    if(stop == true) 
    { 
     sb.append(getWhatzit()); 
    } 
    else 
    { 
     sb.append(""); 
    } 
    return sb.toString(); 
} 

public String generateBlurb() 
{ 
    StringBuffer sb = new StringBuffer(); 
    sb.append(getWhozit()); 
    sb.append(getMultipleWhatzits()); 

    return sb.toString(); 
} 

public static void main(String[] args) 
{ 
    BlurbMaker blurbmaker = new BlurbMaker(); 

    Scanner scanner = new Scanner(System.in); 
    System.out.print("How many blurbs would you like? "); 

    int blurbNumber = scanner.nextInt(); 

    if(blurbNumber > 0) 
     for(int i = 0; i < blurbNumber; i++){ 
      System.out.println("Blurb: " + blurbmaker.generateBlurb()); 
          //NullPointerException on line above 
     } 
    else 
     System.out.println("My work here is done."); 

    scanner.close(); 
}//close main 

}//close class 

我正在为一个编程类的项目工作,并试图运行此程序后,我在这里的代码中列出的四行上得到NullPointerExceptions。我知道一个NullPointerException来自尝试访问null的东西,但我不知道如何解决它。如何解决这个NullPointerException?

回答

8

在无参数构造函数中删除此行。

generator = null; 

你是“复位”以前初始化Random实例,并引起NPE对首次尝试的方法调用使用该实例抛出:

的替代初始化Randomgenerator可能是:

private final Random generator; // no init 

public BlurbMaker() { 
    generator = new Random(); 
} 

public BlurbMaker(Random iniGenerator) { 
    generator = iniGenerator; 
} 

仅在需要时才会创建Random的实例。

+0

super()不会做任何事情,该类不会从Object继承任何东西。你是说这个()? – Adrian 2013-03-14 15:36:36

+0

好吧,是的,会使用'this()',但没有意义创建一个不会被使用的新Random':)。:) – Reimeus 2013-03-14 15:39:03

2

您将无参数构造函数调用到BlurbMaker(),该函数将生成器初始化为null。然后您调用一个生成器的方法,该方法为null。因此NPE。

相关问题