Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较数组中的元素并获取新元素_Java_Arrays_Compare_Processing - Fatal编程技术网

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;iif(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);
}