我有一个填充了双精度值的数组。我想获得数组中第2个,第3个和第4个最低值的索引。这就是我尝试过但我没有得到我想要的东西。
double[] wantedVals = new double [3];
for(double n :allValues){
if(n < wantedVals[2] && n > wantedVals[1]) {
wantedVals[2] = n;
}
}
System.out.println("All Values: "+ Arrays.toString(allValues));
System.out.println("2nd, 3rd, 4th lowest values index: " + Arrays.toString(wantedVals));
}
这是输出。
All Values: [314.8490027477457, 558.1219589782775, 0.0, 538.3207360335937, 519.5707513178547, 271.85862019623363, 452.44377672120766, 448.3506884613316, 365.0024775172766, 380.61611237571117, 225.73376879634114, 310.28009020077326, 121.53621181051349, 95.45317487517113, 280.453364828718, 57.11775118122211, 343.1257001358977, 365.58868943629807, 530.7625668260243, 227.4473840254049, 319.9578951791938, 291.8377585984206, 494.999842171692, 464.97103404405743]
2nd, 3rd, 4th lowest values: [0.0, 0.0, 0.0]
我想要做的是获取所有值数组中第2,第3和第4最低值的索引。
答案 0 :(得分:1)
我可以想到两种方法来实现这一点:对数组进行排序,并重复搜索它。这些都不是最有效的,但对于大多数用例来说它们应该足够好(后者的效率稍高)。
如果要对数组进行排序,只需使用Arrays.paralellSort()并从结果数组中获取所需的任何值。
如果你想重复搜索它,那么只需遍历数组并找到最低值。记下变量中的这个值,并重复原始代码 - 除非当前值最小。最好使用HashSet来包含已选择值的列表,因为可以有效地检查HashSet的值并为其添加值。
答案 1 :(得分:1)
执行索引排序,然后输出索引。像这样:
final int MAX_ARRAY_SIZE = (the biggest that your all values array will be)
int index[] = new int[MAX_ARRAY_SIZE];
for(int i = 0; i < allValues.length(); i++)
{
index[ i ] = i;
}
//Simple Bubble Sort
for(int i = 0; i < allValues.length() - 1; i++)
{
for(int j = i + 1; j < allValues.length(); j++)
{
if(allValues[ index[ i ] ] > allValues[ index[ j ] ])
{
int temp = index[ i ];
index[ i ] = index[ j ];
index[ j ] = temp;
}
}
}
System.out.println("Indexes of 2nd to 4th lowest numbers are the following: ");
for(int i = 1; i < 4; i++)
{
System.out.println(index[ i ]);
}
如果它回答了您的问题,请将此标记为答案。
希望这有帮助!