第2回解答例

記述問題2-1

配列を使うことで、意味が共通する変数(例えば、itemType01とitemType02)をまとまりとして扱うことができる。
これにより、変数の意味が共通するということを明らかにでき、わかりやすいプログラムが書ける。

また、配列では各要素に対して番地(index)で参照できるので、
for文と組み合わせることで、より簡潔なプログラムを書くことができる。

配列は型を指定するために、配列を使いたい要素の型が異なる場合は配列を使うことができない。
さらに、型が同じでも変数の意味が共通ではないときは使うべきではない。
例えば、商品種類を表すitemType01と価格を表すprice01を同じ配列に入れてしまうと、
上記で記述したような利点が得られなくなる。

プログラム問題2-1 Answer2_1.java





/**
* オブジェクト指向哲学 入門編
* プログラム問題2-1 解答
*
* 商品種類を管理するプログラム
*/
public class Answer2_1 {

  /**
  * 商品種類を管理するプログラム
  * コーラ、ソーダ、お茶を追加し、ソーダを検索、ソーダを削除した後、ソーダを検索し、最後に取扱う商品種類を表示する
  */
  public static void main(String[] args) {

    //自動販売機プログラムの開始を知らせる
    System.out.println("自動販売機が開始しました。");

    //商品種類を保存するための配列を定義する
    int[] itemTypeArray = new int[10];

    //商品種類を保存するための変数を初期化する
    //何も入っていないことを-1として扱う
    for(int i=0;i<10;i++){
      itemTypeArray[i] = -1;
    }

    //商品種類を追加する(コーラ、ソーダ、お茶の順)
    int addId = 1001;//コーラを追加する
    for(int i=0;i<10;i++){//商品種類が入っていない箱を探す
      if(itemTypeArray[i] == -1){//入っていない
        itemTypeArray[i] = addId;//書き込む
        break;
      }
    }
    addId = 1022;//ソーダを追加する
    for(int i=0;i<10;i++){//商品種類が入っていない箱を探す
      if(itemTypeArray[i] == -1){//入っていない
        itemTypeArray[i] = addId;//書き込む
        break;
      }
    }
    addId = 1033;//お茶を追加する
    for(int i=0;i<10;i++){//商品種類が入っていない箱を探す
      if(itemTypeArray[i] == -1){//入っていない
        itemTypeArray[i] = addId;//書き込む
        break;
      }
    }

    //商品種類を検索する
    int searchId = 1022;//ソーダを検索する
    for(int i=0;i<10;i++){
      if(itemTypeArray[i] == searchId){//見つかった
        System.out.println("見つかりました");
        break;
      }
      if(i == 9){//最後まで辿ったが見つからなかった
        System.out.println("見つかりませんでした");
      }
    }

    //商品種類を削除する
    int deleteId = 1022;//ソーダを削除する
    int j=0;//ループの回数を保存する
    for(j=0;j<10;j++){
      if(itemTypeArray[j] == deleteId){//見つかった
        itemTypeArray[j] = -1;//見つかったら、削除する(実は不要)
        break;
      }
    }
    //残りの要素をシフトする
    for(;j<9;j++){
      itemTypeArray[j] = itemTypeArray[j+1];
    }

    //商品種類を検索する
    searchId = 1022;//ソーダを検索する
    for(int i=0;i<10;i++){
      if(itemTypeArray[i] == searchId){//見つかった
        System.out.println("見つかりました");
        break;
      }
      if(i == 9){//最後まで辿ったが見つからなかった
        System.out.println("見つかりませんでした");
      }
    }

    //取扱う商品種類を表示する
    for(int i=0;i<10;i++){
      if(itemTypeArray[i] != -1){//商品が入っている
        System.out.println(itemTypeArray[i]+"は販売中です");
      }
    }
  }
}