• 締切済み

参考書の演習問題

クラスは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()); } } これを実行しても実行例のような表示になりません。 どこを変更すればいいか教えてください。

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

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

関連するQ&A

  • java(バブルソート/単純挿入ソート)

    以下のプログラムを「バブルソートもしくは単純挿入ソートのプログラムに変更しなさい」という課題が出ました。 どのようにすればよろしいでしょうか? import java.util.*; public class SelectSort { //プログラムクラス名 //整列プログラム public static void main(String[] args){ //整列用 int 型配列 int[] target; int elems = KeyboardInput.askInt("要素数? "); //配列を乱数で初期化する target = setArray(elems); //初期状態を表示 display(target); //整列メソッドの呼び出し sortArray(target); //整列結果の表示 display(target); } //配列を乱数で初期化するメソッド static int[] setArray(int elems){ // 要素数個の int 型変数の確保 int[] array = new int[elems]; //乱数利用ための宣言 Random generator = new Random(); //乱数の最大値・最小値 int max = 100; int min = 0; //generator.nextDouble() で 0から1までのdouble型乱数発生 for(int i=0 ; i<array.length ; i++) { array[i] = (int)((max-min)*(generator.nextDouble())+min); } return array; } //配列の状態を表示 static void display(int[] array){ for(int i=0 ; i<array.length ; i++) { System.out.print(array[i]+" "); } System.out.println(""); } static void sortArray(int[] array){ //配列のはじめから最後まで繰り返す for( int i = 0; i < array.length-1 ; i++){ int min_id = i; int min = array[i]; //範囲中でもっとも小さい要素を探す for( int j=i+1 ; j< array.length ; j++ ) { if( array[j] < min ){ min = array[j]; min_id = j ; } } //範囲の始めと置き換える int tmp = array[i]; array[i] = array[min_id]; array[min_id] = tmp; //display(array); } } }

  • java初心者です。基本的ですがよろしくおねがいします◎

    下記の内容でコンパイル時にエラーが出てしまいます。 ■問題■要素数10の配列を任意のデータで初期化し、最大値と最小値を求めよ。 import java.io.*; class Ensyu4 {    public static void main(String args[])     {    int i=0,max=0,min=0;//カウンタ、最大値変数、最小値変数         int[10] intArray = {5, 6, 7, 8, 9, 10, 1, 2, 3, 4}; //配列任意初期化         max = intArray[0];         min = intArray[0];         for(i=0;i<10;i++)//最大・最小判定         {             if(max<intArray[i])                 max = intArray[i];             if(min>intArray[i])                 min = intArray[i];         }     System.out.println(max + "が最大値です");     System.out.println(min + "が最小値です");     } } エラーの内容・・・ Ensyu4.java:9: ']' がありません。 int[10] intArray = {5, 6, 7, 8, 9, 10, 1, 2, 3, 4}; //配列任意初 期化 ^ Ensyu4.java:9: 文ではありません。 int[10] intArray = {5, 6, 7, 8, 9, 10, 1, 2, 3, 4}; //配列任意初 期化 ・・・どうやら配列の初期化の仕方が間違っているようなのですが、何が間違っているかわかりません。きっと基本的な間違いなのでしょうが・・・^^; 下記のサイトを参考にさせていただいています◎ http://www.javaroad.jp/java_array1.htm なにとぞご協力お願いいたします^^;

    • ベストアンサー
    • Java
  • C言語 最大値と最小値を求めて表示するプログラム

    はじめまして。 C言語を学習中です。 下記の問題演習の解答として記載されているプログラムがどうしても理解できません。 特にプログラムの最後の方のwhile文で最大値と最小値の判定をしているのかと思いますが、どのような計算をして判定しているのでしょうか。 while (array[i] != -1) { if (array[i] > *max) *max = array[i]; if (array[i] < *min) *min = array[i]; i++; 具体的に教えてください。 よろしくお願い致します。 ●問題 0~100の範囲で入力された複数の数値の中から、 最大値と最小値を求めて表示するプログラムを作成せよ。 -1が入力された場合は入力の終わりと判定する。 ただし、最大値と最小値はmain関数以外の一つの関数の中で求める。 また、入力された数値を記憶する配列の要素数は10とし、 それ以上入力された場合はエラーが起きても仕方ないこととする。 ヒント:配列の中に -1 があればデータの終わりだと判断できる。 ヒント:最小値を探すには、最大値を記憶した変数との比較を繰り返せば良い。 ●解答 #include <stdio.h> void maxmin(int array[],int *max,int *min); int main(void) { int i = 0,array[10],max,min; do { printf("%d 番目の数:",i + 1); scanf("%d",&array[i]); i++; } while (array[i - 1] != -1); maxmin(array,&max,&min); printf("最大値 %d : 最小値 %d\n",max,min); return 0; } void maxmin(int array[],int *max,int *min) { int i = 0; *max = 0; *min = 100; while (array[i] != -1) { if (array[i] > *max) *max = array[i]; if (array[i] < *min) *min = array[i]; i++; } }

  • 入力された入力値と最大値、最小値を表示させるプログラムで、最大値と最小

    入力された入力値と最大値、最小値を表示させるプログラムで、最大値と最小値のプログラムを下記に作成してみたら最小値が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); } }

    • ベストアンサー
    • Java
  • この問題を教えてください

    配列に初期化されたデータの最小値を求めるプログラムなのですが この問題のX,Yの部分がわかりません 教えて頂けないでしょうか? #include <stdio.h> #define N 5 //関数のプロトタイプ宣言 int min(int *p , int n); int main(void) { int data[N] = {15,34,28,12,33}; printf("最小値は%d\n" ,X); } int min(int *p , int n) { int min; //最小値 int i; //カウンタ min = *p; for(i = 1; i < n; i++){ if (min >Y ){ min = Y; } } return min; }

  • javaのコマンドライン引数について

    このプログラムをベースにして、配列をコマンドライン引数で渡せるようにしたいのですが、どうすれば良いのでしょうか。教えてください。 public class Test { public static void main(String[] args){ int[] numbers = {14,8,1,5,0,2,2,5,8,50}; System.out.print("配列中の最大値:"+maxNumber(numbers)); } static int maxNumber(int[] numbers){ int max = 0; for(int i=0; i<numbers.length;i++){ if(max < numbers[i]){ max = numbers[i]; } } return max; } }

    • ベストアンサー
    • Java
  • C言語の穴埋め問題です

    配列に初期化されたデータの中から最小値を求めるプログラムなのですが、■■■を教えて頂けないでしょうか? #include <stdio.h> #define N 5 //関数のプロトタイプ宣言 int min(int *p , int n); int main(void) { int data[N] = {15,34,28,12,33}; printf("最小値は%d\n" , ■■■); } int min(int *p , int n) { int min; //最小値 int i; //カウンタ min = *p; for(i = 1 , ■■■; i < n; i++ , ■■■){ if (min >■■■ ){ min =■■■ ; } } return ■■■; }

  • プログラミング(C言語)についての質問です

    3つの整数の入力を受け付け、最大と最小を求める関数を作成し得られた結果を表示するプログラミングを作成したつもりなのですが、うまく作動しません。(コンパイルはできますが、結果が無茶苦茶になります。) ご教授宜しくお願いします。 それと、課題文にはポインタを使って最大値と最小値を同時に求めるようにと書いてあったのですが、それもよくわからないです。 今回初めてポインタと配列の受け渡しについて習ったのでよくわかっていない部分も多いと思うのですが、何卒宜しくお願いします。 ちなみに関数の形自体は void minmax(int data[],int *min,int *max){} で決まっています。 #include <stdio.h> void minmax(int data[],int *min,int *max){ int i; *min=*max=data[0]; printf("1st intenger:"); scanf("%d",&data[0]); printf("2st intenger:"); scanf("%d",&data[1]); printf("3st intenger:"); scanf("%d",&data[2]); for(i=1;i<3;i++){ if(*max<data[i]){ *max=data[i]; } if(*min>data[i]){ *min=data[i]; } } } int main(void){ int data[3],min,max; minmax(data,&min,&max); printf("最小値は%dで最大値は%dです",min,max); return 0; }

  • ソート

    お世話になります。配列のソートなのですが、どうも思い通りの結果になりません。 配列の中から最大値と最小値を探し、最小値を配列0に、最大値を配列の最後に移動します。その2つ以外の数字の順番は変えません。 例) {4,3,2,0,1,2} 最小値は0、最大値は4なので→{0,3,2,1,2,4} {4,3,2,1} → {1,3,2,4} {1,3,2,4,} → {1,3,2,4} 流れとしては、まず最小値を求め配列0に移動させ、次に最大値を求め配列の最後に移動させようと思います。 プログラムは以下のように組みました。 public int[] sortOfSort(int[] array) { int count_min = 0; int min = array[0]; for (int i = 0; i < array.length-1; i++) { // 最小値を求める if (min > array[i + 1]) { min = array[i + 1]; count_min++; // 最小値の配列のインデックスを確保 } } for (int k = count_min; k > 0; k--) { // 最小値の移動 int temp_min = array[k - 1]; array[k - 1] = array[k]; array[k] = temp_min; } int count_max = 0; int max = array[0]; for (int j = 0; j < array.length-1; j++) { // 最大値を求める if (max < array[j + 1]) { max = array[j + 1]; count_max++; // 最大値の配列のインデックスを確保 } } for (int l = count_max; l < array.length-1; l++) { //最大値の移動 int temp_max = array[l + 1]; array[l + 1] = array[l]; array[l] = temp_max; } return array; } 間違っているところがわかりましたら宜しくお願いします。

    • ベストアンサー
    • Java
  • 処理の流れの説明のしかたがわかりません。

    プログラムの課題が出たのですがソースコードはなんとか穴埋めでできたのですが説明文を簡単につけなければならないのですがあんまり理解してないのでどのように説明したら良いかよくわかりません。お願いします。 10個の整数を配列し保存しそのデータのうちから最大値と最小値を表示するプログラムです。 #include <stdio.h> void main(void) { int data[10]; int i; int max,min; for(i=0;i<10;i++){ printf("input data No. %d ->",i+1); scanf("%d",&data[i]); } max=data[0]; min=data[0]; for(i=1;i<10;i++){ if(data[i]>max){ max=data[i]; } if(data[i]<min){ min=data[i]; } } printf("MAX = %d\n",max); printf("MIN = %d\n",min); } .

専門家に質問してみよう