• 締切済み

参考書の演習問題

クラスはMaxAndMinOfInt フィールド int型の配列(名前はnumbersとします)のみ コンストラクタ 引数で与えられたScannerから整数を順次読み取る。最初に読み取った整数を配列サイズとみなして、int型の配列を生成し、numbersで参照する。その後、整数を読み取ってはnumbers[0],numbers[1],・・・へ順に代入していき、配列サイズ分だけ読み取れば終了。 メソッド void showAll() numbers中の全要素を判りやすく表示する int max() numbers中の最大値を返す int min() numbers中の最小値を返す クラスの機能を確認するためのmainメソッド public static void main(String[] args){   Scanner kbScanner = new Scanner(System.in);   MaxAndMinOfInt array = new MaxAndMinOfInt(kbScanner);   array.showAll();   System.out.printf("最小値は%dです. \n", array.min());   System.out.printf("最大値は%dです. \n", array.max()); } 実行例 これは配列サイズ→5 2 4 6 10 1 ←これはキーボード入力 [2, 4, 6, 10, 1] 最小値は1です. 最大値は10です. 以下は自分で打ち込んでみたものです import java.util.Scanner; public class MaxAndMinOfInt { int[] numbers; public MaxAndMinOfInt(Scanner scanner) { numbers = new int[0]; Scanner kbScanner = new Scanner(System.in); System.out.println(""); int numbers = kbScanner.nextInt(); for (int i = 0;i < numbers; i++) { System.out.print((i + 1)); } } public void showAll() { for (int i = 0; i < numbers.length; i++) { System.out.printf("[]", numbers[i]); } } public int max() { int max = 0; max = numbers[0]; for(int i = 1; i < numbers.length; i++){ if(max < numbers[i]) max = numbers[i]; } return max; } public int min() { int min = 0; min = numbers[0]; for(int i = 1; i < numbers.length; i++){ if(min > numbers[i]) min = numbers[i]; } return min; } public static void main(String[] args) { Scanner kbScanner = new Scanner(System.in); MaxAndMinOfInt array = new MaxAndMinOfInt(kbScanner); array.showAll(); System.out.printf("最小値は%dです.\n", array.min()); System.out.printf("最大値は%dです.\n", array.max()); } } これを実行しても実行例のような表示になりません。 どこを変更すればいいか教えてください。

みんなの回答

回答No.1

import java.util.Scanner; public class MaxAndMinOfInt { int[] numbers; public MaxAndMinOfInt(Scanner scanner) { /* 大きさ0で初期化するな。(削除) */ Scanner kbScanner = new Scanner(System.in); /* メンバ変数と重複すると判りにくいので別名を付けた。*/ int len = kbScanner.nextInt(); /* 最初の値がわかったのでここで漸く配列を初期化 */ numbers = new int[len]; for (int i = 0;i < len; i++) { /* 処理内容が誤っている */ numbers[i] = kbScanner.nextInt(); } } public void showAll() { /* 処理が誤っている。人によっては嫌うかも*/ System.out.print("["); for (int i = 0; i < numbers.length - 1; i++) { System.out.print(numbers[i]); System.out.print(", "); } System.out.print(numbers[numbers.length - 1]); System.out.print("]"); System.out.print("\n"); } /* 処理そのものに問題は無し */ public int max() { int max = 0; max = numbers[0]; for(int i = 1; i < numbers.length; i++){ /* 1行で済むときでも中括弧を付けるほうが個人的に見やすい */ if(max < numbers[i]){ max = numbers[i]; } } return max; } /* 処理そのものに問題は無し */ public int min() { int min = 0; min = numbers[0]; for(int i = 1; i < numbers.length; i++){ /* 1行で済むときでも中括弧を付けるほうが個人的に見やすい */ if(min > numbers[i]){ min = numbers[i]; } } return min; } public static void main(String[] args) { Scanner kbScanner = new Scanner(System.in); MaxAndMinOfInt array = new MaxAndMinOfInt(kbScanner); array.showAll(); System.out.printf("最小値は%dです.\n", array.min()); System.out.printf("最大値は%dです.\n", array.max()); } }