我已经编写了以下代码,现在正在尝试找出实现这四个注释中所解释内容的最佳方法:

    Integer[] expectedValues = new Integer[4];

    for (int i = 0; i <= 3; i++) {
        expectedValues[i] = getExpectedValue(i);
    }

    int choice = randomNumGenerator.nextInt(100) + 1;
    if (choice <= intelligence) {
        // return index of highest value in expectedValues
    } else if (choice <= intelligence * 2) {
        // return index of 2nd highest value in expectedValues
    } else if (choice <= intelligence * 3) {
        // return index of 3rd highest value in expectedValues
    } else {
        // return index of lowest value in expectedValues
    }

这样做的优雅方式是什么?我不需要将期望值保留为数组-我很高兴使用任何数据结构。

最佳答案

您可以创建一个包含索引的新数组,然后对值进行排序-在半伪代码中,它看起来像这样(需要修改):

int[][] valueAndIndex = new int[n][2];

//fill array:
valueAndIndex[i][0] = i;
valueAndIndex[i][1] = expectedValues[i];

//sort on values in descending order
Arrays.sort(valueAndIndex, (a, b) -> Integer.compare(b[1], a[1]));

//find n-th index
int n = 3; //3rd largest number
int index = valueAndIndex[n - 1][0];

07-26 04:29