質問: 配列を使って最大値・最小値・平均値を求めるプログラムを作りたいのですが、うまく出力結果が出ません。(コンパイルは成功) ``` import java.util.Scanner; public class MinMaxAve{ public static void main(String[] args){ System.out.println("数字を入力してください"); Scanner kbd=new Scanner(System.in); int[] data=new int[1000]; int min,max;//(左から)最小値・最大値 double ave;//平均値 int n=0; while(kbd.hasNext()){//hasNext()はリストに要素がなくなるまでtrueを返す data[n]=kbd.nextInt(); n++; } if(n==0){ System.out.println("データがありません"); }else{ min=data[0]; for(int i=1;in;x++){ if(data[x]>max){ max=data[x]; } System.out.printf("max=%d\n",max); } } if(n==0){ System.out.println("データがありません"); }else{ int sum=0;//入力した要素(数字)の合計 for(int y=0;y
回答: エラーをしっかり読みましょう。フォーマット変換が不正だと言っています。 IllegalFormatConversionException 難しい英語じゃないはずです。 問題の行はここです。 > > > ``` > System.out.printf("ave=%d\n",ave); > ``` > > 書式指定子が違います。 そもそも、こう書けばよいと思うのですが。 ``` System.out.println("ave=" + ave); ``` > > もう最後の方はよく分からず、if文を3回繰り返してしまいました。 > > > 難しく考えすぎなんじゃないですか?全部まとめて処理すればよいです。 ``` if(n == 0){ System.out.println("データがありません"); } else { int sum, min, max; double ave; sum = min = max = data[0]; for(int i = 1; i < n; i++) { if(data[i] < min){ min = data[i]; } else if(data[i] > max) { max = data[i]; } sum += data[i]; } ave = 1.0 * sum / n; System.out.println("min=" + min); System.out.println("max=" + max); System.out.println("ave=" + ave); } ``` 動作確認はしていません。