gpt4 book ai didi

java - 如何从java中的以下无限循环退出但仍然用唯一值填充 vector 直到100?

转载 作者:行者123 更新时间:2023-12-02 02:12:15 25 4
gpt4 key购买 nike

我想从唯一值创建大长度的 vector 而不重复,但以下代码进入无限循环。

 public static void main(String[] args) {
// TODO code application logic here
Vector v1=new Vector(100);
Vector v2=new Vector(100);
Random r=new Random();
int i=0;
while(i<100){
double val=Math.abs(r.nextGaussian());
double h=(double)((double)Math.round(val*10)/10.0);
if (!v1.contains(h)){
v1.add(h);
i++;
}
}
for(int j=0;j<v1.size();j++)
v2.set(j, v1.get(j));

}

}

最佳答案

首先,不要使用原始类型( Collection<Double> ,而不仅仅是原始 Collection )。其次,你想要一个 Set (不是 Vector )并假设您需要保留原始顺序,您可以使用 LinkedHashSet 。您可以测试Set大小,直到有一百个值。而且,您在分配 h 时不需要任何这些转换。 (并且您需要记住所需的计数 - 如果您使用 10 ,您会将值范围限制为 110 )。就像,

Set<Double> set = new LinkedHashSet<>();
Random r = new Random();
int count = 100;
while (set.size() < count) {
double val = Math.abs(r.nextGaussian());
double h = Math.round(val * count) / 10.0;
set.add(h);
}
System.out.println(set);

您还可以写 while循环就像

while (set.size() < count) {
set.add(Math.round(Math.abs(r.nextGaussian()) * count) / 10.0);
}

或者,如果使用 Java 8+,您可以使用 DoubleStreamdistinct()limit(int)与 lambda 。就像,

Random r = new Random();
int count = 100;
Set<Double> set = DoubleStream.generate(() -> Math.round(
Math.abs(r.nextGaussian()) * count) / 10.0).boxed()
.distinct().limit(count).collect(Collectors.toSet());
System.out.println(set);

关于java - 如何从java中的以下无限循环退出但仍然用唯一值填充 vector 直到100?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49848506/

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