import java.io.*;
class sample61{
public static void main(String[] args) throws IOException{
System.out.println("テストの受験者数を入力してください。");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int num = Integer.parseInt(str);
int[] test;
test = new int[num];
int total = 0;
int max = test[0];
int min = test[0];
int ave = 0;
System.out.println("人数分の点数を入力してください。");
for(int i=0; i<num; i++){
str = br.readLine();
int tmp = Integer.parseInt(str);
test [i] = tmp;
}
for(int i=0; i<num; i++){
System.out.println((i+1) + "番目の人の点数は" + test[i] + "です。");
total = total + test[i];
}
System.out.println("合計点:" + total + "点");
for (int i=0; i<num; i++) {
if (max < num[i]) { //現在の最大値よりも大きい値が出たら
max = num[i]; //変数maxに値を入れ替える
}
if (min > num[i]) { //現在の最小値よりも小さい値が出たら
min = num[i]; //変数minに値を入れ替える
}
}
System.out.println("最高得点:" + max + "点");
System.out.println("最低得点:" + min + "点");
System.out.println("平均得点:" + total/num + "点");
}
}
テストの受験者数を入力してください。
5
人数分の点数を入力してください。
80
90
60
40
32
1番目の人の点数は80です。
2番目の人の点数は90です。
3番目の人の点数は60です。
4番目の人の点数は40です。
5番目の人の点数は32です。
合計点:302点
最高得点:90点
最低得点:0点
平均得点:60点
になるんですが、最高得点は出たのですが、最低得点が32点なはずなのに、0点になるんですが、問題は何でしょうか?
No.4ベストアンサー
- 回答日時:
> たとえばどのようにですか?
……えーと、自分はちゃんと具体的に
> System.out.println("人数分の点数を入力してください。");
> のあとの for ループの直後に max と min の宣言を移動すれば正常に動作するでしょう。
と書いてますよ?
-----------------------------------------------------------------------------------------------
import java.io.*;
class sample61{
public static void main(String[] args) throws IOException{
System.out.println("テストの受験者数を入力してください。");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int num = Integer.parseInt(str);
int[] test;
test = new int[num];
int total = 0;
// ここから……
// int max = test[0];
// int min = test[0];
int ave = 0;
System.out.println("人数分の点数を入力してください。");
for(int i=0; i<num; i++){
str = br.readLine();
int tmp = Integer.parseInt(str);
test [i] = tmp;
}
// ……ここに移動
int max = test[0];
int min = test[0];
for(int i=0; i<num; i++){
System.out.println((i+1) + "番目の人の点数は" + test[i] + "です。");
total = total + test[i];
}
System.out.println("合計点:" + total + "点");
for (int i=0; i<num; i++) {
if (max < num[i]) { //現在の最大値よりも大きい値が出たら
max = num[i]; //変数maxに値を入れ替える
}
if (min > num[i]) { //現在の最小値よりも小さい値が出たら
min = num[i]; //変数minに値を入れ替える
}
}
System.out.println("最高得点:" + max + "点");
System.out.println("最低得点:" + min + "点");
System.out.println("平均得点:" + total/num + "点");
}
}
No.2
- 回答日時:
原因は No.1 様の書いていらっしゃる通りなのですが、No.1 様の修正方法では対応できる点数の範囲を 0-100 に固定してしまいます。
データの一番目を最大値・最小値の初期値にするという考え自体は点数の範囲を限定しないという点で柔軟性があります。
問題はそのデータが入力される前にデータ格納領域の一番目を参照してしまったという点です。
ですので、データ入力が終わった後で上記の最大値・最小値の初期化を行えばいいのです。
System.out.println("人数分の点数を入力してください。");
のあとの for ループの直後に max と min の宣言を移動すれば正常に動作するでしょう。
No.1
- 回答日時:
変数minを初期化する際に"0"で初期化しているからです。
>int min = test[0];
この時点でmin=0ですから、それ以降どの数字と比べても"0"の方が小さいままですね。
こういう最大、最小を取得するプログラムを書くときは
「最大値は想定される一番小さい値で初期化」
「最小値は想定される一番大きい値で初期化」
するのがセオリーです。
ですので、今回なら
int max = 0;
int min = 100;
としておけば良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 3 2022/11/09 13:27
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Ctrl+Zが入力されると終了する...
-
countに実行した回数をいれたい...
-
Java、2の0乗~10乗の表示
-
テキストボックスに入力された...
-
コマンドライン引数の例外処理...
-
2つのスクロールバーを連動させ...
-
7つ数字を表示したら改行すると...
-
エラー(互換性の無い型)
-
階乗
-
入力データ数を入力して、その...
-
画面出力の際の繰り返しと入力...
-
入力された入力値と最大値、最...
-
キーボードから10人分の点数を...
-
C#の質問
-
フィールド名やメソッド名に日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Randomメソッドの確率設定
-
論理演算子”||”またはの入力方法
-
テキストボックスに入力された...
-
java キーボード入力された値の...
-
countに実行した回数をいれたい...
-
Java 配列<選挙>
-
総称型ArrayList<E>への参照...
-
Java、2の0乗~10乗の表示
-
2つのスクロールバーを連動させ...
-
数値⇒漢数字変換 java
-
Java 入力した整数値の合計を、...
-
配列を逆順させて表示させる方...
-
エラー(互換性の無い型)
-
javaで数独を解くプログラムに...
-
2次元配列の並び替え
-
javaのエラーが回収できない
-
7つ数字を表示したら改行すると...
-
java 電卓のプログラム
おすすめ情報
int max = test[0];
int min = test[0];
これを
int max = 0;
int min = 100;
に変更したのですが、その場合は、
for (int i=0; i<num; i++) {
if (max < num[i]) { //現在の最大値よりも大きい値が出たら
max = num[i]; //変数maxに値を入れ替える
}
if (min > num[i]) { //現在の最小値よりも小さい値が出たら
min = num[i]; //変数minに値を入れ替える
ここも変えたほうがいいんでしょうか?
よろしくおねがいします。
たとえばどのようにですか?