大学の授業の課題で次のようなものが出されました。「答え(ソースコード)」ではなく、「解く為のヒント」を教えてください。言語は”Java”です。
【問題】
以下は「商品の在庫管理に関するプログラム」である。
次のプログラムでは、コマンドライン引数として商品種類の数を指定できたが、
商品の初期在庫を指定できない。コマンドライン引数として、商品種類の数の代わりに、
商品の初期在庫を指定できるようにこのプログラムを修正し、プログラムを作成せよ。
コマンドライン引数がない場合は、デフォルトの要素数(5)で初期化する。
また、初期化直後の在庫も表示せよ。
該当のソースコード
Java
1import java.io.BufferedReader; 2import java.io.InputStreamReader; 3public class Kadai12_7 { 4 public static void main(String[] args) throws Exception{ 5 int[] inventory = initialize(args); //在庫データの初期化 6 update(inventory); //在庫データの更新処理 7 output(inventory); //現在の在庫データ表示 8 } 9 10 //在庫変更データの入力 11 static int[] input() throws Exception{ 12 BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); 13 System.out.print("商品番号?"); 14 int itemnumber = Integer.parseInt(buf.readLine()); 15 16 System.out.print("個数増減?"); 17 int itemchange = Integer.parseInt(buf.readLine()); 18 19 //ここで要素数2の1次元整数配列を生成し 20 //在庫変更データを設定した後 21 //戻り値として配列を返したい 22 23 int item[] = new int[2]; 24 item[0] = itemnumber; 25 item[1] = itemchange; 26 27 return item; 28 29 } 30 31 //在庫データの表示 32 static void output(int[] inventory){ 33 System.out.println("商品在庫:"); 34 35 //ここで配列 inventory を forループで巡回し 36 //在庫にある商品番号(要素番号)と個数を全て表示する 37 38 for( int a=0; a<inventory.length; a++){ 39 System.out.println("商品 "+a+" 個数= "+inventory[a]); 40 } 41 } 42 43 //在庫データの更新 44 static void change(int[] inventory, int[] item){ 45 //ここで引数int[] itemの在庫変更データを参照し 46 //在庫変更データに従い引数 int[] inventory の在庫データを更新 47 inventory[(item[0])]=inventory[(item[0])]+item[1]; 48 } 49 50 //在庫データの初期化 51 static int[] initialize(String[] args){ 52 int size = 5; //デフォルトの要素数 53 if(args.length > 0){ //実行時引数がある場合 54 size = Integer.parseInt(args[0]); //実行時引数で要素数を設定 55 } 56 57 //1次元整数配列 inventory を 要素数 size で生成 58 //生成した配列を戻り値として返す 59 60 int inventory[] = new int[size]; //配列生成 61 62 return inventory; //戻り値設定 63 } 64 65 //在庫データの繰り返し更新処理 66 static void update(int[] inventory) throws Exception{ 67 68 int[] item = input(); //商品増減入力 69 70 //while文を用いて商品番号(item[0])がマイナスの値で無い限り 71 //下記更新処理を繰り返し行う 72 while(item[0] > 0){ 73 change(inventory, item); //在庫データ更新 74 output(inventory); //現在の在庫データ表示 75 item = input(); //商品増減入力 76 } 77 //繰り返しここまで 78 } 79}
###現時点で修正をした箇所
◎修正前
java
1public static void main(String[] args) throws Exception{ 2 int[] inventory = initialize(args); //在庫データの初期化 3 update(inventory); //在庫データの更新処理 4 output(inventory); //現在の在庫データ表示 5 }
◎修正後
java
1public static void main(String[] args) throws Exception{ 2 int[] inventory = initialize(args); //在庫データの初期化 3 output(inventory); //初期化直後の在庫データ表示 4 update(inventory); //在庫データの更新処理 5 output(inventory); //現在の在庫データ表示 6 }
上記のソースコードを実行した時の出力結果
(”商品番号”と”個数増減”は標準入力で、商品番号がマイナスになった時点で処理は終了する。)
商品番号?1
個数増減?2
商品在庫:
商品 0 個数= 0
商品 1 個数= 2
商品 2 個数= 0
商品番号?2
個数増減?5
商品在庫:
商品 0 個数= 0
商品 1 個数= 2
商品 2 個数= 5
商品番号?2
個数増減?2
商品在庫:
商品 0 個数= 0
商品 1 個数= 2
商品 2 個数= 7
商品番号?-1
個数増減?0
商品在庫:
商品 0 個数= 0
商品 1 個数= 2
商品 2 個数= 7
修正後の出力結果(コマンドライン引数=1 3 2 である時)
商品在庫:
商品 0 個数= 1
商品 1 個数= 3
商品 2 個数= 2
商品番号?1
個数増減?2
商品在庫:
商品 0 個数= 1
商品 1 個数= 5
商品 2 個数= 2
商品番号?2
個数増減?3
商品在庫:
商品 0 個数= 1
商品 1 個数= 5
商品 2 個数= 5
商品番号?2
個数増減?2
商品在庫:
商品 0 個数= 1
商品 1 個数= 5
商品 2 個数= 7
商品番号?-1
個数増減?0
商品在庫:
商品 0 個数= 1
商品 1 個数= 5
商品 2 個数= 7
補足情報(使用言語など)
使用しているプログラミング言語はJavaです。
またプログラム作成にはJ-doodleを使用しています。
現時点で自身で分かっている事と分かっていない事は
『初期化後に現在の在庫データを表示する事およびどこを修正するか』は分かっており、
『初期化に関わる部分(initializeメソッド)を修正する事で、目的の出力結果が出る。(要は、この部分を修正すれば、初期化直後の在庫データの表示、つまりは目的の出力結果の表示が可能と考えた。)』事も分かっていますが『その部分の中でも何処を、どのように修正したら良いか。』が分かりません。
※【追記1】現時点での分かっている事、分からない事を追記しました。情報に不足があり、ただ単なる答え丸投げのような書き方に見えてしまい、申し訳ございません。私自身には一切そのような気持ちはありません。授業内容や教科書の参照、先生からのアドバイスをもとに何回も修正・出力を繰り返しましたが、それでも分かりませんでしたので"ヒントをいただきたい"という名目で質問させていただきました。
※【追記2】現時点で、自身で修正した部分のソースコードと『初期化に関わる部分(initializeメソッド)を修正する事で、目的の出力結果が出る。』の理由を直後に()書きで追記しました。
回答2件
あなたの回答
tips
プレビュー