LinkedHashMap和NullPointerException

时间:2018-08-03 16:53:52

标签: java nullpointerexception linkedhashmap

我一直在基于Markov Chains构建名称生成器。到目前为止,代码可以找到下一个字母的概率并将其很好地放置在名为LinkedHashMap的{​​{1}}的{​​{1}}(我将在这一点以后称为LHM)上,方法是使用states功能。 LHM存储数据,因此第一个键是状态,第二个键是过渡字母。

但是,这是开始变得有趣的地方。我有三个输出语句,一个在generateProbabilities()函数中,两个在generate() init中。这是我的输出:

编辑部分:

WeightedRandom

奇怪的是,第14行的NPE是Called from generate(): [0.13333333333333333, 0.13333333333333333, 0.13333333333333333, 0.06666666666666667, 0.13333333333333333, 0.06666666666666667, 0.06666666666666667, 0.13333333333333333, 0.06666666666666667, 0.06666666666666667] Called from WeightedRandom (Size): 10 Called from WeightedRandom (Values): [0.13333333333333333, 0.13333333333333333, 0.13333333333333333, 0.06666666666666667, 0.13333333333333333, 0.06666666666666667, 0.06666666666666667, 0.13333333333333333, 0.06666666666666667, 0.06666666666666667] Exception in thread "main" java.lang.NullPointerException at WeightedRandom.<init>(WeightedRandom.java:14) at MarkovChain.generate(MarkovChain.java:102) at Temp.main(Temp.java:7) 中的第二个println语句,它在打印出数据后被抛出。第三个println打印没有错误。因此,这并不是像我忘记初始化它,或者没有正确的密钥来获得NPE。代码如下:

MarkovChain.java

WeightedRandom

WeightedRandom.java

public class MarkovChain {
public String filePath;
public LinkedHashMap<String,LinkedHashMap<String,Double>> states = new LinkedHashMap<String,LinkedHashMap<String,Double>>();

public MarkovChain(String filePath){
    this.filePath = filePath;
}
public void generateProbabilities(String delimiter){
  //Creates a hashmap of probabilities for each letter.
}

public String generate(int iterations){
    Random rand = new Random();
    LinkedHashMap<String,Double> currProbabilities = states.get("a"); // Placeholder for random start state;
    String output = "";
    WeightedRandom weightRand;

    System.out.println("Called from generate(): " + currProbabilities.values());
    for(int i = 0; i<iterations; i++){
        weightRand = new WeightedRandom(currProbabilities);
        String newState = weightRand.compute();
        output+=newState;
        currProbabilities = states.get(newState);
    }

    return output;
}
}

0 个答案:

没有答案