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

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

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

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

Q&A

解決済

2回答

3192閲覧

javaで1~10の乱数を5つ発生させ、合計と平均を出した後に平均よりも大きい値と小さい値を表示したい

blotors

総合スコア4

Java

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

0グッド

1クリップ

投稿2021/09/13 15:32

はじめまして。
javaで1~10の乱数を5つ発生させ、合計と平均を出した後に平均よりも大きい値と小さい値を表示したいのですが、
二つ以上表示できません。どうかご教示お願いします。

public static void main(String[] args) {

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

}

表示される結果は、例えば
5 8 6 10 1

合計値; 30
平均値; 6

平均値より大きい数; 10
平均値より小さい数; 1

のようになり、平均値より大きいはずの8や小さいはずの5が出せません。
二つ以上の変数に代入するようなやり方が良いのでしょうか?わかりません。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

良いも悪いも、一つの変数には一つの値しか入りません。
なぜ「乱数を5つ発生させ」たものを(sum や avg のような)"変数"では無く配列に入れているのかをお考えください。

別の考え方としまして、平均が求まった後にまた for 文で「平均より大きい/小さい値を探しながら表示する」というのもあるかと思います。

投稿2021/09/13 17:50

編集2021/09/13 17:52
jimbe

総合スコア12756

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

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

blotors

2021/09/14 11:06

ご指摘の通り、平均が求まった後にまた for 文で平均より大きい/小さい値を探しながら表示するやり方で上手くいきました。ありがとうございます。big、smallという変数は必要ありませんでした。
guest

0

2つ以上表示できないについては、すでに回答にありますが
変数1つには1つしか保存できないので、配列やList、文字列として結合するなどの仕組みが必要です。

その他指摘としては、現状このプログラムでは以下の問題があります。
・平均を出すタイミング適切でない。

乱数生成が1,2,3,4,5とされた場合
平均値の推移は

sum += data[i];
avg = sum / data.length;

とあるので、1/5、3/5.6/5、10/5、15/5 となります。
本来の平均値として正しいのは15/5じゃないでしょうか。

・平均の小数部が切り捨てられる
intをintで割ると小数部が切り捨てられます。
たとえば、1/2は、0.5でなく0になります。

投稿2021/09/14 01:03

momon-ga

総合スコア4820

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

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

blotors

2021/09/15 15:39

ご回答ありがとうございます。小数点以下の部分は切り捨てられていますね。本来の平均値については現状の私のレベルではよくわかりません。いずれ理解できればと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問