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

私はプログラミング クラスのプロジェクトに取り組んでおり、このプログラムを実行しようとした後、ここのコードにリストされている 4 行で NullPointerExceptions が発生しています。null にアクセスしようとすると NullPointerException が発生することはわかっていますが、修正方法がわかりません。

4

2 に答える 2

8

引数のないコンストラクターでこの行を削除します。

generator = null;

Random以前に初期化されたインスタンスを「リセット」し、NPEそのインスタンスを使用して最初に試行されたメソッド呼び出しで をスローします。

を初期化する代替手段は次のRandom generatorとおりです。

private final Random generator; // no init

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

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

Randomこれにより、必要な場合にのみのインスタンスが作成されます。

于 2013-03-14T15:26:06.180 に答える
2

引数なしのコンストラクターをBlurbMaker()に呼び出します。これにより、ジェネレーターがnullに初期化されます。次に、ジェネレーターでメソッドを呼び出します。これはnullです。したがって、NPE。

于 2013-03-14T15:26:34.840 に答える