数値の配列があり、それぞれのインデックス値を持つ3つの数値のうち最大のものが必要です。私はこのような配列を持っています:
int [] value = new int[5];
value[0] = 8;
value[1] = 3;
value[2] = 5;
value[3] = 2;
value[4] = 7;
最大数とそのインデックス値を見つける方法は?
これは宿題だと思うので、助けを与えるつもりですが、完全な解決策ではありません。
最大の3つの数値と、それらのインデックス値が必要ですか?
さて、これまでに見つけた最高の3つの数字を追跡しながら、配列の上を歩きます。また、それらのインデックス番号を追跡します。
最大数とそのインデックスに対してのみこれを行うことから始めることができます。それは簡単なはずです。BiggestNumber
たとえば、との2つの変数を取りますindexOfBiggestNumber
。最大数(自明)を見つけることから始め、次にそれがインデックスであることを覚えておくためにいくつかのコードを追加します。
それができたら、2番目に大きい数とそのインデックスを追跡するために、さらにいくつかのコードを追加できます。
その後、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;
}
}
配列をトラバースして非常に多くの変数を追跡する必要はありません。以下のように、すでに実装されているメソッドを利用できます。
List ofを使用してから、オーバーライドされたメソッドを使用してインターフェイスを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個の最大数を取得できます。
上位 3 つのエントリを取得するには、基本的に並べ替えて、最後の 3 つのエントリを選択します。
インデックスを取得するにはもう少し手間がかかりますが、間違いなく実行可能です。compareTo
関数が数値のみを気にする Comparable に、数値とそのインデックスをまとめるだけです。並べ替え、最後の 3 つの項目を取得すると、それぞれの数値とそのインデックスが得られます。
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 つの要素を表示します。