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

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

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

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

Q&A

解決済

1回答

6373閲覧

最頻値が複数の場合の求め方

MISHIRO

総合スコア27

Java

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

0グッド

0クリップ

投稿2017/05/30 17:27

編集2017/05/30 17:58

最頻値を求めたいのですが頭が混乱してきてわからなくなってしまいました。
最頻値が複数ある場合は複数表示させたいです。
どうすればよいかご教授願います。
コメントがところどころ間違っていますが気にしないでくださるとうれしいです。

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 }

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

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

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

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

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

swordone

2017/05/30 17:45

質問編集画面でコードを反転選択して、画面上の<code>を押してください
MISHIRO

2017/05/30 17:59

反転選択がわからなかったのですがこれで大丈夫でしょうか。このような機能があることを初めて知りました。ありがとうございます。
guest

回答1

0

ベストアンサー

最大頻度と同じ頻度を持つ数字をリスト化する。
最大頻度が更新されたらそれまでのリストを破棄し、新たにリストを作成する。

そもそも数字で扱うべきものなので、ListをString型で使う必要はなく、Integerで使えばいい話。

投稿2017/05/30 17:42

swordone

総合スコア20651

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

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

MISHIRO

2017/05/30 18:03 編集

回答ありがとうございます。 コードにするとこのようなことでしょうか? int a =0; for (i = 0; i < b.length; i++) { if (b[i] >= b[max]) { if(a==0){ array.clear(); a++; } max = i; // 最大頻度を求める arra.add(b[i]); } }
MISHIRO

2017/05/30 18:06

最大頻度が更新されたらそれまでのリストを破棄 というコードの書き方がわかりません。 お手数ですが教えていただけませんか?
swordone

2017/05/30 18:16

まあこれに限らずやり方はいろいろあります。 最高頻度を求めてからその最高頻度をもつ最頻値を探すという方法とかね。 まず「どうすれば複数の最頻値を取り出せるか」をしっかり考えてください。 そんなに難しくないはずなので。
MISHIRO

2017/05/30 23:11

なるほど。 発想の転換ですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問