第3回解答例

記述問題3-1

メソッドを利用することで、共通の目的をもつ仕事をまとめることができる。
メソッドでは、仮引数に対してプログラムを書くことができるので、
(実際の仕事は実引数で与えられたさまざまな具体的な値に対して行われる)
プログラムを仕事の内容ごとにまとめて記述できる。
それゆえ、簡潔で、目的が明確なプログラムを書くことができる。

メソッドは、目的ごとにまとめるとわかりやすいプログラムになる。
そのため、たとえ重複コードでも、目的が異なる場合はメソッド化しないほうが良い場合がある。

プログラム問題3-1 Answer3_1.java





/**
* オブジェクト指向哲学 入門編
* プログラム問題3-1 解答
*
* 商品種類を管理するプログラム
*/
public class Answer3_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;
    }

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

    //商品種類を検索する
    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(int[] targetArray,int addId){
    //商品種類が入っていない箱を探す
    for(int i=0;i<10;i++){
      if(targetArray[i] == -1){//入っていない
        targetArray[i] = addId;//書き込む
        break;
      }
    }
  }

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

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

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

}