gpt4 book ai didi

java - TreeMap.higherEntry 返回意外的 null

转载 作者:行者123 更新时间:2023-12-02 10:36:28 26 4
gpt4 key购买 nike

好的,我有这段代码,应该从加权列表中获取随机条目。但是,当我尝试调用 TreeMap.higherEntry 时,即使有更高的条目可用,它也会返回 null。 lowerEntry 确实有效,ceilingEntry 返回相同的 null。这是我的代码:

import java.util.*;

public class Randomizer<E> extends ArrayList<E> {
private Random rng;
private double defaultWeight;
public Randomizer(List<E> list) {
super(list);
rng = new Random();
defaultWeight = 1.0d;
}
/*Stripped some uninteresting constructor variations for clarity*/
public void setSeed(long seed) {
rng.setSeed(seed);
}
public E getRandom() {
TreeMap<Double,E> map = new TreeMap<>();
double total = 0;
for(E e : this) {
if(e instanceof Weighted) {
map.put(((Weighted) e).getWeight(),e);
total += ((Weighted) e).getWeight();
} else {
map.put(defaultWeight,e);
total += defaultWeight;
}
System.out.println(total);
}
double value = rng.nextDouble() * total;
System.out.println(value + ", " + map.higherKey(value));
return map.higherEntry(value).getValue();
}
}

这是一个小数据集的控制台输出:

5.0
9.0
11.0
14.0
15.0
15.5
19.5
22.5
24.0
26.5
27.5
28.0
9.987466924354226, null
Exception in thread "main" java.lang.NullPointerException
at me.datafox.utils.Randomizer.getRandom(Randomizer.java:52)
at me.datafox.grick.SwordTest.main(SwordTest.java:39)

我是不是做错了什么?数据集的格式非常奇怪,因此我将其省略,但很明显,从权重列表计算总数并不是我面临的问题。

最佳答案

javadoc说:

Returns a key-value mapping associated with the least key strictly greater than the given key, or null if there is no such key.

您的代码执行以下操作:

double value = rng.nextDouble() * total;

长话短说:唯一的解释是没有符合该标准的值。换句话说:你的逻辑在这里从根本上被打破了。

重点是:您正在乘以一个随机值。所有的赌注都在这里。有时您的代码可能会产生非空结果,有时则不会。

关于java - TreeMap.higherEntry 返回意外的 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53258582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com