第4回解答例

記述問題4-1

クラスとインスタンスを使うことにより、プログラムがもつデータを意味のカタマリごととしてまとめ、
人間の世界に近い語彙を作ってプログラムを書くことができる。
(例えば、「ItemType」という語彙を作って、プログラムが書ける)
人間の世界に近い語彙を利用することでプログラムが人間に読みやすくなる。

クラスはインスタンスが持つ属性を定義した「型」であり、インスタンスは属性の値を持った「実体」である。
クラスは、「class ItemType{}」で定義され、インスタンスは「new ItemType()」で生成される。

記述問題4-2

クラスはインスタンスという「実体」を生成するための型のようなものである。クラスはインスタンスが持つ属性を定義し、インスタンスはそれぞれクラスによって定義された属性の値を持っている。

プログラム問題4-1 Answer4_1.java





/**
* オブジェクト指向哲学 入門編
* プログラム問題4-1:解答
* 取り扱う商品種類を管理するプログラム
*
* メインクラス
*/
public class Answer4_1 {

  /**
  * メイン
  * 取り扱う商品種類を管理するプログラム
  * コーラ、ソーダ、お茶を追加し、リストを表示する
  */
  public static void main(String[] args) {

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

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

    //商品種類を追加する
    add(itemTypeArray,new ItemType(1001,"コーラ",120));
    add(itemTypeArray,new ItemType(1022,"ソーダ",120));
    add(itemTypeArray,new ItemType(1033,"お茶",120));

    //商品種類を検索する
    boolean isFound = search(itemTypeArray,1022);//ソーダを検索
    System.out.println(isFound);//検索結果を表示

    //商品種類を削除する
    remove(itemTypeArray,1022);//ソーダを削除

    //商品種類を検索する
    isFound = search(itemTypeArray,1022);//ソーダを検索
    System.out.println(isFound);//検索結果を表示

    //商品種類リストを表示する
    display(itemTypeArray);

  }

  /**
  * 商品種類を追加する
  */
  public static void add(ItemType[] targetArray,ItemType addItemType){
    //商品種類が入っていない箱を探す
    for(int i=0;i<10;i++){
      if(targetArray[i] == null){//入っていない
        targetArray[i] = addItemType;//書き込む
        break;
      }
    }
  }

  /**
  * 商品種類を検索する
  */
  public static boolean search(ItemType[] targetArray,int searchId){
    //一つ一つ商品種類を探す
    for(int i=0;i<10;i++){
      if(targetArray[i] != null){
        if(targetArray[i].id == searchId){//見つかった
          return true;
        }
      }
    }

    //見つからなかった
    return false;
  }

  /**
  * 商品種類を削除する
  */
  public static void remove(ItemType[] targetArray,int deleteId){
    int i=0;//ループの回数を保存する
    for(i=0;i<10;i++){
      if(targetArray[i].id == deleteId){//見つかった
        targetArray[i] = null;//見つかったら、削除する(実は不要)
        break;
      }
    }
    //残りの要素をシフトする
    for(;i<9;i++){
      targetArray[i] = targetArray[i+1];
    }
  }

  /**
  * 商品種類リストを表示する
  */
  public static void display(ItemType[] targetArray){
    for(int i=0;i<10;i++){
      if(targetArray[i] != null){//商品種類が入っている
        System.out.println(targetArray[i].id+":"+targetArray[i].name+":"+targetArray[i].price+"は販売中です");
      }
    }
  }

}

      





プログラム問題4-1 ItemType.java





/**
* オブジェクト指向哲学 入門編
* プログラム問題4-1:解答
* 取り扱う商品種類を管理するプログラム
*
* 商品種類クラス
*/
public class ItemType {

  int id;         //商品番号
  String name;    //商品名
  int price;      //価格

  /**
  * コンストラクタ
  */
  public ItemType(int newID,String newName,int newPrice) {
    name = newName;
    price = newPrice;
    id = newID;
  }
}

      





 

プログラム問題4-2 Answer4_2.java





/**
* オブジェクト指向哲学 入門編
* プログラム問題4-2:解答
* 取り扱う商品種類を管理するプログラム
*
* メインクラス
*/
public class Answer4_2 {

  /**
  * メイン
  * 取り扱う商品種類を管理するプログラム
  * コーラ、ソーダ、お茶を追加し、リストを表示する
  */
  public static void main(String[] args) {

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

    //商品種類リストをインスタンス化する
    ItemTypeList itemTypeList = new ItemTypeList();

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

    //商品種類を追加する
    itemTypeList.add(itemTypeArray,new ItemType(1001,"コーラ",120));
    itemTypeList.add(itemTypeArray,new ItemType(1022,"ソーダ",120));
    itemTypeList.add(itemTypeArray,new ItemType(1033,"お茶",120));

    //商品種類を検索する
    boolean isFound = itemTypeList.search(itemTypeArray,1022);//ソーダを検索
    System.out.println(isFound);//検索結果を表示

    //商品種類を削除する
    itemTypeList.remove(itemTypeArray,1022);//ソーダを削除

    //商品種類を検索する
    isFound = itemTypeList.search(itemTypeArray,1022);//ソーダを検索
    System.out.println(isFound);//検索結果を表示

    //商品種類リストを表示する
    itemTypeList.display(itemTypeArray);

  }

}

      





プログラム問題4-2 ItemTypeList.java





/**
* オブジェクト指向哲学 入門編
* プログラム問題4-2:解答
* 取り扱う商品種類を管理するプログラム
*
* 商品種類リストクラス
*/
public class ItemTypeList {

  /**
  * 商品種類を追加する
  */
  public void add(ItemType[] targetArray,ItemType addItemType){
    //商品種類が入っていない箱を探す
    for(int i=0;i<10;i++){
      if(targetArray[i] == null){//入っていない
        targetArray[i] = addItemType;//書き込む
        break;
      }
    }
  }

  /**
  * 商品種類を検索する
  */
  public boolean search(ItemType[] targetArray,int searchId){
    //一つ一つ商品種類を探す
    for(int i=0;i<10;i++){
      if(targetArray[i] != null){
        if(targetArray[i].id == searchId){//見つかった
          return true;
        }
      }
    }

    //見つからなかった
    return false;
  }

  /**
  * 商品種類を削除する
  */
  public void remove(ItemType[] targetArray,int deleteId){
    int i=0;//ループの回数を保存する
    for(i=0;i<10;i++){
      if(targetArray[i].id == deleteId){//見つかった
        targetArray[i] = null;//見つかったら、削除する(実は不要)
        break;
      }
    }
    //残りの要素をシフトする
    for(;i<9;i++){
      targetArray[i] = targetArray[i+1];
    }
  }

  /**
  * 商品種類リストを表示する
  */
  public void display(ItemType[] targetArray){
    for(int i=0;i<10;i++){
      if(targetArray[i] != null){//商品種類が入っている
        System.out.println(targetArray[i].id+":"+targetArray[i].name+":"+targetArray[i].price+"は販売中です");
      }
    }
  }
}