67196


「最大値が複数あればそれら全部の番号を記入する」というお題なので、普通にfor文で変数に記録する形だと上書きされてしまって出力時に1つしか出ない為、今回は配列（maxl）をもうひとつ作り、実行しましたが、以下の結果になってしまいました。

もっとこうすれば良い、というのがございましたら教えて頂ければ幸いです。配列に拘りはないので、配列を作らずもっとスマートにできる方法があれば、なおいいです。

コード

[code]

    import java.util.*;
    
    public class Sample52 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            double[] a = new double[100];
            int count = 0;
            double sum = 0.0;
            double max = Double.NEGATIVE_INFINITY;
            int[] maxl = new int[100];
            int q = 0;
            int maxmax = 0;
            double x;
            while (count < a.length) {
                System.out.print(count + ">");
                x = sc.nextDouble();
                if (x == 0)
                    break;
                sum = sum + x;
                a[count] = x;
                if (x >= max) {
                    max = x;
                    maxmax = count;
                    maxl[count] = count;
                }
                ++count;
            }
    
            System.out.println("終了");
    
            for (int i = count - 1; i >= 0; --i) {
                System.out.println(a[i]);
            }
            System.out.println("");
            for (int r = 0; r < count; ++r) {
                System.out.println("最大値は" + maxl[r] + "番目");
            }
    
            System.out.println("max=" + max);
            System.out.println("sum=" + sum);
        }
    }
    
[/code]

結果

0>3

1>6

2>6

3>2

4>2

5>0

終了

2.0

2.0

6.0

6.0

3.0

最大値は0番目

最大値は1番目

最大値は2番目

最大値は0番目

最大値は0番目

max=6.0

sum=19.0


CC BY-SA 4.0
2020-06-01T09:16:35.330
67191
2020-06-01T12:57:27.267
2020-06-01T12:46:14.020
7290
39688
question
java
配列に実数をいくつかを読み込み、その最大値が何番目か(複数あればそれら全部の番号)を出力したいです


まず、最大値を求めるには、入力された値を全部チェックしなくてはなりません。  
まだ途中（一部の値しかチェックできていない）の段階では、最大値は不明と考えるべきです（まだチェックしていない値の中に最大値があるかもしれませんからね）。

ところが、質問にかかれているプログラムの

[code]

    if(x>=max){max=x;maxmax=count;
        maxl[count]=count;
    }
    
[/code]

の部分では、今、調べている値(x)が、それまでに調べた中で一番大きかった値(max)と同じか大きければ、それが最大値だと扱っています（ｘの位置に最大値があると、配列maxlに記録しています）。

そのため、3,6,6,2,2という入力に対して、  
0番目の3は、それまでの最大値Double.NEGATIVE_INFINITYより大きいから、0番目に最大値があると記録。  
1番目の6は、それまでの最大値の3より大きいから、1番目に最大値があると記録。  
2番目の6は、それまでの最大値の6と同じだから、2番目に最大値があると記録。  
となって、画面に

> 最大値は0番目  
>  最大値は1番目  
>  最大値は2番目

と出力されている訳です。

プログラムを正しく動作させるには、  
まず最初に「全ての値をチェックして最大値を求める」  
そして、最大値と一致する値の位置を調べて、それを画面に表示する  
という手順にしてみてください。


CC BY-SA 4.0
2020-06-01T12:57:27.267
67196
2020-06-01T12:57:27.267
217
67191
answer