我必须找到第一,第二和第三大数组。我知道我可以简单地对其排序并返回array [0],array [1],array [3]。但是问题是,我需要索引,而不是值。
例如,如果我有float[] listx={8.0, 3.0, 4.0, 5.0, 9.0},则应返回4、0和3。

这是我拥有的代码,但是它不起作用:

//declaration max1-3
public void maxar (float[] listx){

    float maxel1=0;
    float maxel2=0;
    float maxel3=0;

    for (int i=0; i<listx.length; i++){
        if(maxel1<listx[i])
        {maxel1=listx[i];
        max1=i;
        }
    }
    listx[max1]=0; //to exclude this one in nextsearch

    for (int j=0; j<listx.length; j++){
        if(listx[j]>maxel2)
        {maxel2=listx[j];
        max2=j;
        }
    }
    listx[max2]=0;

    for (int k=0; k<listx.length; k++){
        if(listx[k]>maxel3)
        {maxel3=listx[k];
        max3=k;
        }
    }
}


我得到正确的max1,但是之后所有元素都变为0。因此max2和max3变为0。请建议我该解决方案出了什么问题。谢谢。

最佳答案

您可以使用单个循环找到这三个元素,而无需修改数组。

当遇到新的最大元素时,需要将先前的最大元素和先前的第二大元素向下移动一个位置。

同样,当找到新的第二大元素时,需要将maxel2转换为maxel3

您可能要使用一个数组,而不是使用这三个变量。这将使您能够简化逻辑,并使归纳到k最大元素变得容易。

07-26 03:54