質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

1713閲覧

配列のインデックス出力について

yukina

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2018/02/21 09:17

編集2018/02/21 09:39

配列の問題についてです。

指示にはメソッド名MaxIndex 戻り値int型の配列、引数int型の配列a
処理内容 配列aの最大値を持つ全要素のインデックスを格納した配列を返却
とかいてあります。

そしてメインメソッドでキーボードから配列aの要素数、中身の整数値を入力します。

ここでなんですが、どうやったらインデックスの配列を作ることができるのでしょうか。
a[] = {2, 3 , 6 , 5 , 6 , 4}
の場合、2と4を出したいのですが、まったくうまくいきません。
よろしくお願いします。

こんな感じで試してみました。
public int[] maxIndex(int[] a) {

int ma = a[0]; int[] mai = new int[a.length]; for(int i = 0; i < a.length; i++) { if(ma < a[i]) { mai[i] = i; } } return mai; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unz.hori

2018/02/21 09:21

やってみたこと(ソース)等が提示されないとなんとも答えようがありません。
unz.hori

2018/02/21 09:40

ソースはコード(</>)を使って貼ってください。
unz.hori

2018/02/21 09:42

全要素のインデックスの配列であれば合っている気がしますが...
guest

回答4

0

java

1static int[] maxIndex(int[] a){ 2 List<Integer> index = new ArrayList<>(); 3 index.add(0); 4 int max = a[0]; 5 for(int i = 1; i < a.length; i++){ 6 if(a[i] > max){ 7 max = a[i]; 8 index = new ArrayList<Integer>(); 9 } 10 if(a[i] == max){ 11 index.add(i); 12 } 13 } 14 return index.stream().mapToInt(x -> x).toArray(); 15}

インスタンスの無駄が多いかも。

投稿2018/02/21 11:15

編集2018/02/22 08:38
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/02/22 06:14

細かい点で恐縮ですが、==を=に誤字ってますよ。
swordone

2018/02/22 08:39

ご指摘ありがとうございます。
yukina

2018/02/24 15:35

回答ありがとうございました まだ勉強を始めたばかりで・・・ ArrayListを使うのは思い浮かびませんでした
guest

0

ベストアンサー

初心者向けにしては難しいというか面倒い課題ですね。

書いてある内容自体は、

配列aの最初の要素の値int ma = a[0]より大きな値だったら、返却する配列の
インデックスを保存して返却する。

と、なっています。

int配列の初期値は0なので、0かインデックスが保存されます。
上記の例だと最初の2以外は全部、インデックスが保存されるかつ、返却する配列は元のaと同じ大きさ。

というわけで、やりたいことを書いてあることが違うので、うまくいきません。
~~~~~
で、ここから
やりたいことを、そのまま書く方法についてです。

a[] = {2, 3 , 6 , 5 , 6 , 4}

の場合、2と4を出したい

まずは頭で考えたことを、愚直にコードにすればよいです。
人は頭が良いので、複数のことを同時に処理できちゃうのですが、プログラミングは
ひとつひとつの手順をきちんと書く(プログラミングする)必要があります。

  1. 配列aの要素の最大値を探して記録する
  2. 記録した最大値が配列aの中に何個あるか記録する
  3. 返却用の配列を作成して最大値のインデックスを記録する

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}

投稿2018/02/21 11:02

編集2018/02/22 03:04
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukina

2018/02/24 15:36

細かくありがとうございます。 すっきりできました。
guest

0

原始的な書き方で。

static int[] maxIndex(int[] a){ int maxVal = 0; int valCount = 0; for(int i = 0; i < a.length; i++){ if(a[i] > maxVal){ maxVal = a[i]; valCount = 0; } maxCount += (a[i] == maxVal) ? 1 : 0; } int[] retArr = new int[maxCount]; int retArrIndex = 0; for(int i = 0; i < a.length; i++){ if(a[i] == maxVal){ retArr[retArrIndex++] = i; } } return retArr; }

投稿2018/02/21 10:08

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

書いてみた。

Java

1static int[] maxIndice(int[] arg) { 2 int max = Arrays.stream(arg).max().getAsInt(); 3 return IntStream.range(0, arg.length) 4 .filter(i -> arg[i] == max) 5 .toArray() 6 ; 7}

投稿2018/02/21 09:53

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukina

2018/02/24 15:36

ありがとうございます。 こんなにシンプルにできるのですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問