Java 比较数组中的元素并获取新元素
我意识到以前有人问过这个问题,我看了一下,但对我来说,它只在一定程度上起作用。经过一番挣扎,我想我会问。 我在对象的构造函数中有一个浮点数组 事情是这样的:Java 比较数组中的元素并获取新元素,java,arrays,compare,processing,Java,Arrays,Compare,Processing,我意识到以前有人问过这个问题,我看了一下,但对我来说,它只在一定程度上起作用。经过一番挣扎,我想我会问。 我在对象的构造函数中有一个浮点数组 事情是这样的: count = 3; angles = new float[count]; 虽然我想实现一种模块化的、可重用的方法,但数组长度确实很小 我在数组中循环分配浮点数: for (int i = 0; i < angles.length; i++) { angles[i] = radians(random(360)); }
count = 3;
angles = new float[count];
虽然我想实现一种模块化的、可重用的方法,但数组长度确实很小
我在数组中循环分配浮点数:
for (int i = 0; i < angles.length; i++) {
angles[i] = radians(random(360));
}
for(int i=0;i
然后,通过一个新循环,我检查奇异元素之间的夹角是否小于30度,如果是,则指定一个新的随机值:
for (int i = 0; i < angles.length; i++) {
for (int k = i+1; k < angles.length; k++){
if(angles[i] != angles[k]){
if(abs(angles[i] - angles[k]) <= radians(30)){
angles[i] = radians(random(360));
}
}
}
}
for(int i=0;i if(abs(angles[i]-angles[k])而不是只使用if语句检查一次,您可以将其更改为while语句,以便它尝试查找新的随机数,直到新的随机数生效
while (abs(angles[i] - angles[k]) <= radians(30)){
angles[i] = radians(random(360));
}
while(abs(angles[i]-angles[k])为什么不在前面使用递归:
for (int i = 0; i < angles.length; i++) {
angles[i] = findSuitable( i==0 ? 0 : angles[i-1] )
}
...
float findSuitable(float limit){
float sample = radians(random(360));
if(Math.abs(sample-limit) > 30)
return sample;
else
return findSuitable(limit);
}
for(int i=0;i30)
返回样品;
其他的
返回findSuitable(限制);
}
在我看来,您可以尝试将随机代码更改为:
随机d=新随机();
我修好了程序错误,它看起来很有逻辑性和优雅,所以我给它一个镜头。它看起来在大多数情况下都很好,但是我必须说,不总是这样。我也不会把程序中的任何地方弄得乱七八糟。我有点困惑。@ KATOPTOPAK我修正了代码中的错误(我刚才抄袭了你的代码并添加了while循环)。。问题是在k=i+1
而不是k=0
处启动第二个for循环,并且新值没有根据旧值重新检查自身。
for (int i = 0; i < angles.length; i++) {
angles[i] = findSuitable( i==0 ? 0 : angles[i-1] )
}
...
float findSuitable(float limit){
float sample = radians(random(360));
if(Math.abs(sample-limit) > 30)
return sample;
else
return findSuitable(limit);
}