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

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

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

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

Q&A

解決済

2回答

2641閲覧

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

papparapa

総合スコア12

Java

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

0グッド

0クリップ

投稿2019/03/05 07:10

前提・実現したいこと

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

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

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

該当のソースコード

java

1String num=""; 2 int sum=0; 3 double ave=0.0; 4 String big=""; 5 String small=""; 6 int []arr=new int[5]; 7 for(int i=0;i<arr.length;i++){ 8 arr[i]=(int)(Math.random()*10)+1; 9 num+=arr[i]+" "; 10 sum+=arr[i]; 11 ave=sum/arr.length; 12 if(ave<arr[i]){ 13 big+=arr[i]+" "; 14 }else if(ave>arr[i]){ 15 small+=arr[i]+" "; 16 }else{ 17 break; 18 } 19 } 20 System.out.println(num); 21 System.out.println("合計値:"+sum); 22 System.out.println("平均値:"+ave); 23 System.out.println("平均値より大きい数:"+big); 24 System.out.println("平均値より小さい数:"+small);

試したこと

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

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

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

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

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

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

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

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

m.ts10806

2019/03/05 07:17

質問は編集できます。 「試したこと」に具体的に調べたことや試したことを記載してください また、「ダメでした」「うまくいきませんでした」 他人には何も伝わらない表現方法なので、具体的に起きた現象を書いてください。
mather

2019/03/05 07:18

> ifを使って分類させようとしたのですが、できませんでした。 何が期待通りに動かなかったのかを具体的に書いてください。 なお、学校の課題ならまずは先生や周囲の人に聞きましょう。
m.ts10806

2019/03/05 07:19

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

2019/03/05 07:32

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

2019/03/05 07:35

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

回答2

0

(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 07:47

jimbe

総合スコア12632

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

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

papparapa

2019/03/05 08:05

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

0

ベストアンサー

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


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

投稿2019/03/05 07:24

編集2019/03/05 07:38
madoka9393

総合スコア992

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

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

madoka9393

2019/03/05 07:49

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

2019/03/05 08:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問