初心者向けにしては難しいというか面倒い課題ですね。
書いてある内容自体は、
配列aの最初の要素の値int ma = a[0]
より大きな値だったら、返却する配列の
インデックスを保存して返却する。
と、なっています。
int配列の初期値は0なので、0かインデックスが保存されます。
上記の例だと最初の2以外は全部、インデックスが保存されるかつ、返却する配列は元のaと同じ大きさ。
というわけで、やりたいことを書いてあることが違うので、うまくいきません。
~~~~~
で、ここから
やりたいことを、そのまま書く方法についてです。
a[] = {2, 3 , 6 , 5 , 6 , 4}
の場合、2と4を出したい
まずは頭で考えたことを、愚直にコードにすればよいです。
人は頭が良いので、複数のことを同時に処理できちゃうのですが、プログラミングは
ひとつひとつの手順をきちんと書く(プログラミングする)必要があります。
- 配列aの要素の最大値を探して記録する
- 記録した最大値が配列aの中に何個あるか記録する
- 返却用の配列を作成して最大値のインデックスを記録する
maは、最大値を保存する変数と思われますので、上記の場合、6を保存します。
あとは、6が何回でるかをループで検索します。(2回)
最後に、要素数2の配列'mai'を作って、もう1回ループしてインデックスを格納します。
tkturbo さんの回答で十分だと思いますが、さらに愚直に。
効率性は、あとから気にすればよいですが、まずは頭で考えたことを、そのままコード化してみましょう。
java
1static int[] maxIndex(int[] a){
2// 最大値の検索
3 int ma = -1;
4 for(int i = 0; i < a.length; i++){
5 if(ma < a[i]){
6 ma = a[i];
7 }
8 }
9// 最大値が何個あるかの検索
10 int valCount = 0;
11 for(int i = 0; i < a.length; i++){
12 if(ma == a[i]){
13 valCount++;
14 }
15 }
16// 最大値のインデックスを格納
17 int[] mai = new int[valCount];
18 int maiIndex = 0;
19 for(int i = 0; i < a.length; i++){
20 if(ma == a[i]){
21 mai[maiIndex++] = i;
22 }
23 }
24 return mai;
25}