我有一个数字数组,我需要三个具有相应索引值的数字中最大的一个。我有一个这样的数组:
int [] value = new int[5];
value[0] = 8;
value[1] = 3;
value[2] = 5;
value[3] = 2;
value[4] = 7;
如何找到最大的数字及其索引值?
我怀疑这是家庭作业,所以我会提供一些帮助,但不是完整的解决方案。
您需要最大的三个数字,以及它们的索引值吗?
好吧,遍历数组,记录到目前为止你找到的最高的三个数字。还要跟踪他们的索引号。
您可以首先对最大的数字及其索引执行此操作。那应该很容易。它需要两个变量,例如BiggestNumber
和indexOfBiggestNumber
。从找到最大的数字(微不足道)开始,然后添加一些代码来记住它的索引。
一旦你有了它,你可以添加更多代码来跟踪第二大数字和它的索引。
在那之后,你对第三大的数字做同样的事情。
我已经为你完成了,这很有效。
这是完整的代码:
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;
}
}
无需遍历数组并跟踪这么多变量,您可以利用已经实现的方法,如下所示。
我建议使用 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 个最大的数字及其索引。
要获得最大的三个,基本上,你排序,然后选择最后三个条目。
获取他们的索引需要更多的工作,但绝对是可行的。只需将数字及其索引捆绑在一个 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
按降序对数组进行排序并显示前 3 个元素。