入力された入力値と最大値、最小値を表示させるプログラムで、最大値と最小値のプログラムを下記に作成してみたら最小値が0になりました。そして、もう一つ繰り返し文を作ってみたら、最大値・最小値がうまく表示されました。この違いはどうしてですか?教えてください。
import java.io.*;
class Hairetu1
{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("データはいくつですか?");
String str = br.readLine();
int num = Integer.parseInt(str);
int a[]=new int[num];
int i;
int max=0; int min=a[0];
for(i=0; i<a.length; i++){
System.out.print((i+1)+"番目は?");
str = br.readLine();
int tmp = Integer.parseInt(str);
a[i] = tmp;
if(max<tmp){
max=tmp;
}
if(min>tmp){
min=tmp;
}
}
System.out.println("入力した値は"+test.length);
System.out.println("最大は"+max);
System.out.println("最小は"+min);
}
}
No.1ベストアンサー
- 回答日時:
> int max=0; int min=a[0];
この時点でa[0]は配列を用意しただけで中身は初期値のままです。
よって、minにはintの初期値である0が入ります。
その後の入力で負の値が入力されない限り、minは0のままです。
>もう一つ繰り返し文を作ってみたら
というのが意味がわかりませんが、aを初期化せずに
max=0; min=a[0];
for(i=0; i<a.length; i++){
...
としたのなら、この場合は、前回のa[0]の値がminになるので、入力した値にa[0]以下の数値が含まれているときは正しい値になります。入力した値がすべてa[0]より大きかったら、正しい値になりません。
このような場合方法は次のどれかを使うのが常套手段です。
・入力値の範囲がある程度決っている場合(例:成人男性の身長(cm) 0以下や1000以上は有り得ない)
maxには有り得ないほど小さな数値、minには有り得ない程大きな数値を初期値として入れておく
→身長の例なら max=-10 ; min = 9999 ;等
・同じく、入力値に制限がある場合
入力値の範囲外の特定の数値を「初期値」として、max/minが初期値だったら判定無しに入力値をmax,minとする
→同じく、 max = min = 9999 ;
...
if(max==9999){ max=tmp;min=tmp;} else {
if(max<tmp){max=tmp;}
if(min>tmp){min=tmp;}
}
・制限無く使える方法
最初の入力時に判定無しで入力値をmax,minとする。
最初かどうかは、booleanで判定フラグを用意したり、今回のような場合には添字==0かどうかで判定する。
添字での判定例
if(i==0){ max=tmp;min=tmp;} else {
if(max<tmp){max=tmp;}
if(min>tmp){min=tmp;}
}
フラグでの判定例
boolean isFirst = true ;
...
if( isFirst ){ max=tmp;min=tmp;isFirst=false;} else {
if(max<tmp){max=tmp;}
if(min>tmp){min=tmp;}
}
・入力値はすべて記録してあって、かつ、入力した順番を入れ替えてもよい場合
ソートして、先頭と最終の要素を使う
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
論理演算子”||”またはの入力方法
-
javaのエラーが回収できない
-
Ctrl+Zが入力されると終了する...
-
processingで String str="AAAB...
-
コマンドライン引数の例外処理...
-
3つの値の中間値を求める
-
Randomメソッドの確率設定
-
javaが上手くいきません
-
7つ数字を表示したら改行すると...
-
九九の表
-
2次元配列の並び替え
-
繰り返しによる星印の出力
-
入力された入力値と最大値、最...
-
エラー(互換性の無い型)
-
Java 入力した整数値の合計を、...
-
点数をだす時に、maxとminがお...
-
javaの数字当てゲーム
-
テキストボックスに入力された...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
コマンドライン引数の例外処理...
-
JAVAのfor文で困っています。
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Java 入力した整数値の合計を、...
-
7つ数字を表示したら改行すると...
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
総称型ArrayList<E>への参照...
-
Randomメソッドの確率設定
-
Ctrl+Zが入力されると終了する...
-
学校で課題を出されて困ってい...
-
Java キーボードから負の数が入...
-
階乗の式
-
キーボードから10人分の点数を...
-
Java 配列<選挙>
おすすめ情報