最頻値を求めたいのですが頭が混乱してきてわからなくなってしまいました。
最頻値が複数ある場合は複数表示させたいです。
どうすればよいかご教授願います。
コメントがところどころ間違っていますが気にしないでくださるとうれしいです。
java
1int a[] = new int[100]; // 配列a[0]~a[99]生成:100個の乱数保持用 2 int b[] = new int[101]; // 配列b[0]~b[9]生成:頻度保持用 3 int i, j, max; 4 DecimalFormat fm1 = new DecimalFormat("00"); // 表示形式宣言 5 Random rnd = new Random(); // ランダムクラス宣言 6 7 for (i = 0; i < a.length; i++) { 8 a[i] = rnd.nextInt(100) + 1; // 0~9の整数値一様疑似乱数生成・代入 9 } 10 11 for (i = 0; i < a.length; i++) { 12 b[a[i]]++; // 頻度を数える:a[i]の値に該当する頻度値を1増やす 13 } 14 15 for (i = 1; i < b.length; i++) { // 結果表示 16 System.out.print(i + " (" + fm1.format(b[i]) + ")"); 17 for (j = 0; j < b[i]; j++) { 18 System.out.print("*"); // 頻度数(b[i])を「*」で描画 19 } 20 System.out.println(); 21 } 22 23 List<String> array = new ArrayList<String>(); 24 max = 0; 25 int mm = 0; 26 for (i = 0; i < b.length; i++) { 27 if (b[i] >= b[max]) { 28 max = i; 29 // 最大頻度を求める 30 array.add(String.valueOf(b[i])); 31 } 32 } 33 System.out.println("------------------------"); 34 35 int l = 0; 36 37 for (int n = array.size() - 1; n < array.size(); n++) { 38 l = Integer.parseInt(array.get(n)); 39 for(int q = array.size()-1;q>-1;q--){ 40 int w = Integer.parseInt(array.get(q)); 41 if(w!=l){ 42 array.remove(q); 43 } 44 } 45 } 46 47 for (int m = 0; m < array.size(); m++) { 48 //if (b[Integer.parseInt(array.get(m))] == l) { 49 System.out.println("最頻値は" + array.get(m) + "で,その頻度は" + b[Integer.parseInt(array.get(m))] + "です."); 50 //} 51 }
回答1件
あなたの回答
tips
プレビュー