アプリ版:「スタンプのみでお礼する」機能のリリースについて

クラスは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());

}
}

これを実行しても実行例のような表示になりません。
どこを変更すればいいか教えてください。

A 回答 (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());

}
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!