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

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

ただいまの
回答率

87.59%

Javaで配列・乱数を発生させ、そのあたいをぶんるいしたいです。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,653

score 12

前提・実現したいこと

javaで乱数を発生させた後、その値を分類させたいです。
問題:
(1)長さ5のint型の配列を作成する。
(2)(1)の各要素に、1から10までの乱数を代入する。
(3)配列の内容をすべて表示する。
(4)配列の値の合計値と、平均値を表示する。
(5)平均値よりも大きい数を表示する
(6)平均値よりも小さい数を表示する。

発生している問題・エラーメッセージ

ifを使って分類させようとしたのですが、できませんでした。

該当のソースコード

String num="";
        int sum=0;
        double ave=0.0;
        String big="";
        String small="";
        int []arr=new int[5];
        for(int i=0;i<arr.length;i++){
            arr[i]=(int)(Math.random()*10)+1;
            num+=arr[i]+" ";
            sum+=arr[i];
            ave=sum/arr.length;
            if(ave<arr[i]){
                big+=arr[i]+" ";
            }else if(ave>arr[i]){
                small+=arr[i]+" ";
            }else{
                break;
            }
        }
        System.out.println(num);
        System.out.println("合計値:"+sum);
        System.out.println("平均値:"+ave);
        System.out.println("平均値より大きい数:"+big);
        System.out.println("平均値より小さい数:"+small);    

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/03/05 16:19

    また「問題」とあります。
    課題や宿題であれば自分でやりましょう・・・というのが方針でもあります。
    きちんと「質問」にしてください。
    https://teratail.com/help/question-tips#questionTips1-1
    > 作業依頼のような投稿をして、課題や仕事を無償でやってもらえる場ではありません。
    あなたがそのようなつもりで質問しているのだと他のユーザーから誤解されないように、丁寧な質問を心がけましょう。
    https://teratail.com/help/avoid-asking
    >何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。

    キャンセル

  • papparapa

    2019/03/05 16:32

    ご丁寧にご指摘ありがとうございます。
    現在独学で始めていて、この問題はwebから引っ張て来たものです。
    誤解させたなら申し訳ございません。気を付けます。
    以降、質問する際は参考にさせていただきます。

    キャンセル

  • m.ts10806

    2019/03/05 16:35

    質問は編集できますので整理いただいたら良かったのですが…

    キャンセル

回答 2

+2

(1)~(6) をプログラムにコメントとして記入し, それぞれ毎に for 文や if 文が完結するように記述されたほうが良いかと思います.
一度に全ての計算を行うことは, 平均値がある時点で出来ないのではないでしょうか.

(2)(1)の各要素に、1から10までの乱数を代入する。

(2-1) 配列の各要素毎に以下を行う
(2-1-1) 要素に乱数を入れる

(3)配列の内容をすべて表示する。

(3-1) 配列の各要素毎に以下を行う
(3-1-1) 要素を表示する

(4)配列の値の合計値と、平均値を表示する。

(4-0) 合計値を 0 に初期化する
(4-1) 配列の各要素毎に以下を行う
(4-1-1) 合計値に要素を加算する
(4-2) 合計値を表示する
(4-3) 合計値と配列数によって平均値を計算する
(4-4) 平均値を表示する

(5)平均値よりも大きい数を表示する

(5-1) 配列の各要素毎に以下を行う
(5-1-1) 平均値よりも大きい場合は以下を行う
(5-1-1-1) 要素を表示する

(6)平均値よりも小さい数を表示する

(6-1) 配列の各要素毎に, 以下を行う
(6-1-1) 平均値よりも小さい場合は, 以下を行う
(6-1-1-1) 要素を表示する

これらの動作が完成された上で, 修正・確認 を繰り返しながら for 文や if 文をまとめていかれるほうが, 学習には良いかと思います.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/05 17:05

    丁寧な回答ありがとうございます。
    分割してそれぞれを完結させたらうまくいきました。
    ここから、まとめる方法を試行錯誤してみます。
    ご丁寧にありがとうございます。

    キャンセル

checkベストアンサー

+1

(1)(2)と(3)以降は分割した方が良いかと。
「配列(長さ5の整数乱数配列)を作る処理」と
「作った配列の要素を判定する処理」を分割できれば上手くいくはずです。


分割するしないに関わらず、現在の実装では「判定処理」の「条件分岐」に問題があり、
全ての要素を判定する前に処理が終わってしまう場合があるので、そこはどうにかする必要はあります。
(配列の中に「平均値」と等価な値があった場合、現在の実装ではどうなってしまうでしょう?)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/05 16:49

    jimbe 様の回答にあるように、現在の実装(処理を分割しない)だと、都度平均値が変わってしまう問題もありましたね。

    キャンセル

  • 2019/03/05 17:01

    分割したら、うまくいきました。
    ありがとうございます。
    条件分岐はelse{break}を外しました
    同じ値だと終わってしまいますね…

    キャンセル

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

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る