如何根据元素值Java

时间:2017-04-13 23:53:23

标签: java arrays

我有一个填充了双精度值的数组。我想获得数组中第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最低值的索引。

2 个答案:

答案 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 ]);
}

如果它回答了您的问题,请将此标记为答案。

希望这有帮助!