2013-03-14 93 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。

相關問題