0

我有一个数字数组,我需要三个具有相应索引值的数字中最大的一个。我有一个这样的数组:

int [] value = new int[5];
value[0] = 8;
value[1] = 3;
value[2] = 5;
value[3] = 2;
value[4] = 7;

如何找到最大的数字及其索引值?

4

5 回答 5

10

我怀疑这是家庭作业,所以我会提供一些帮助,但不是完整的解决方案。

您需要最大的三个数字,以及它们的索引值吗?

好吧,遍历数组,记录到目前为止你找到的最高的三个数字。还要跟踪他们的索引号。

您可以首先对最大的数字及其索引执行此操作。那应该很容易。它需要两个变量,例如BiggestNumberindexOfBiggestNumber。从找到最大的数字(微不足道)开始,然后添加一些代码来记住它的索引。

一旦你有了它,你可以添加更多代码来跟踪第二大数字和它的索引。

在那之后,你对第三大的数字做同样的事情。

于 2012-09-10T13:01:15.470 回答
3

我已经为你完成了,这很有效。

这是完整的代码:

import java.util.Arrays;

class tester {
    public static void main(String[] args) {
        int[] value = new int[5];
        value[0] = 8;
        value[1] = 3;
        value[2] = 5;
        value[3] = 2;
        value[4] = 7;
        int size = value.length;
        int[] temp = (int[]) value.clone();
        Arrays.sort(temp);
        for (int i = 0; i < 3; i++) {
            System.out.println("value: " + temp[size - (i + 1)] +
                    " index " + getIndex(value, temp[size - (i + 1)]));
        }
    }

    static int getIndex(int[] value, int v) {
        int temp = 0;
        for (int i = 0; i < value.length; i++) {
            if (value[i] == v) {
                temp = i;
                break;
            }
        }
        return temp;
    }
}
于 2012-09-10T13:39:56.097 回答
1

无需遍历数组并跟踪这么多变量,您可以利用已经实现的方法,如下所示。

我建议使用 List ,Map.Entry<key,value > (where key=index and value=number)然后Comparator使用重写的compare方法实现接口(对值进行排序)。实施后,只需对列表进行排序。

public static void main(String[] args) {
    int[] value = {5, 3, 12, 12, 7};
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    for (int k = 0; k < value.length; k++)
        map.put(k, value[k]);

    List<Map.Entry<Integer, Integer>> list =
            new LinkedList<Map.Entry<Integer, Integer>>(map.entrySet());

    Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
        @Override
        public int compare(
                Entry<Integer, Integer> e1,
                Entry<Integer, Integer> e2) {
            return e2.getValue().compareTo(e1.getValue());
        }
    });

    for (Entry<Integer, Integer> lValue : list)
        System.out.println("value = " + lValue.getValue()
                + " , Index = " + lValue.getKey());
}

结果:

value = 12 , Index = 2
value = 12 , Index = 3
value = 7 , Index = 4
value = 5 , Index = 0
value = 3 , Index = 1

通过这种方法,您可以获得前 N 个最大的数字及其索引。

于 2012-09-10T13:18:28.273 回答
0

要获得最大的三个,基本上,你排序,然后选择最后三个条目。

获取他们的索引需要更多的工作,但绝对是可行的。只需将数字及其索引捆绑在一个 Comparable 中,其compareTo功能只关心数字。排序,得到最后三个项目,现在你有了每个数字它的索引。

class IntWithIndex implements Comparable<IntWithIndex> {
    public int number, index;
    public IntWithIndex(number, index) {
        this.number = number;
        this.index  = index;
    }
    public int compareTo(IntWithIndex other) {
        return number - other.number;
    }
}

...
IntWithIndex iwi[] = new IntWithIndex[yourNumbers.length];
for (int i = 0; i < yourNumbers.length; ++i) {
    iwi[i] = new IntWithIndex(yourNumbers[i], i);
}
Arrays.sort(iwi);

int largest      = iwi[iwi.length - 1].number;
int largestIndex = iwi[iwi.length - 1].index;
// and so on
于 2012-09-10T12:56:17.767 回答
-1

按降序对数组进行排序并显示前 3 个元素。

于 2012-09-10T12:56:36.053 回答