Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:入力された入力値と最大値、最小値を表示させるプログラムで、最大値と最小)

プログラムで入力された値の最大値と最小値を表示する方法

このQ&Aのポイント
  • プログラムで入力された値の最大値と最小値を表示する方法についてご質問いただきました。
  • 作成されたプログラムでは、最小値が0になってしまう問題が発生しています。
  • また、繰り返し文を追加すると、最大値と最小値が適切に表示されるようになりました。この違いについて説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答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