・2009年6月 橋本


河原林研究室 >> EcoBe!ダンスGUI >> 2009年6月 橋本

今月の目標 (実際)

  • Java:テキストファイルの入出力(100%)
    • &color(foreground[,background]){text};
  • Java:コレクション(%)
    • コレクション(ArrayList?)
    • コレクション(LinkedList?)
    • コレクション(HashMap?)
    • &color(foreground[,background]){text};
  • Java:オブジェクト指向の単元に入る。(%)
    • &color(foreground[,background]){text};
  • テキストエディタを作れるように頑張る。(%)
    • &color(foreground[,background]){text};
  • 英語王決定戦を戦い抜く。(%)
    • &color(foreground[,background]){text};

今週の目標(6/4〜6/10)

  • Java:テキストファイルの入出力 (100%)
    • ファイルに追加で書き込む
    • まとめてファイルに書き込む
    • 便利な書き込み用クラス
  • Java:コレクション(ArrayList?) (50%)
    • ArrayList?クラス
    • 格納されている要素数
    • 要素の置き換え
    • 要素の検索
    • 要素の削除

出来た事・分かった事

  • ArrayList?クラスを使えば、最初に配列の大きさを決めなくてもよいと分かった。(便利!!)
  • テキストファイルの入出力の単元を一通り終えることが出来た。

問題点

  • 何も見ずに作れるまでにはなっていない。
    • 応用したものも作っていく必要があると思う。

2009-6-4(Thu)13:20〜17:00

  • 先月のWikiを改良。
  • ファイルに追加で書き込む<http://www.javadrive.jp/start/stream/index5.html>
    • FireWriter?クラスのオブジェクトを作成する時に、2番目の引数として"true"を指定する。
      if (checkBeforeWritefile(file)){
        FileWriter filewriter = new FileWriter(file, true); //"true"で最後に追加。
      
        filewriter.write("はい。元気です\r\n");
        filewriter.write("ではまた\r\n");
      
        filewriter.close(); //ファイルを閉じる。
      }
    • 逆に2番目の引数に"false"を指定した場合、ファイルの先頭に書き込まる。既にファイルに入っていたテキストはいったん消された上で書き込まれる。
      (上書きではなく、いったん全て消えた上で書き込みが行われる)。
  • まとめてファイルに書き込む<http://www.javadrive.jp/start/stream/index6.html>
    • FileReader?BufferedReader?があったように、FileWriter?にもBufferedWriter?がある。
      try{
           File file = new File("c:\\Sample.txt");
      
           if (checkBeforeWritefile(file)){
             BufferedWriter bw = new BufferedWriter(new FileWriter(file));
      
             bw.write("こんにちは");
             bw.newLine(); //OSなどの環境に合わせ改行コードを自動で判断して出力する。("newLine"メソッド)
             bw.write("お元気ですか?");
             bw.newLine(); // 〃 ("newLine"メソッド)
      
             bw.close();
           }
      }
  • 便利な書き込み用クラス<http://www.javadrive.jp/start/stream/index7.html>
    • PrintWriter?クラスは、既にあるファイル出力用のクラスをさらに拡張する感じで利用する。
      BufferedWriter?クラスのオブジェクトを元に作成する場合が多い。
      File file = new File(file_name);
      FileWriter filewriter = new FileWriter(file);
      BufferedWriter bw = new BufferedWriter(filewriter);
      PrintWriter pw = new PrintWriter(bw);
    • 画面に出力する時のように"print"メソッドや"println"メソッドが用意されている。
    • int型やboolean型の値もそのまま出力するように記述することが可能。
      (数値でも他の値でも、値を文字としてファイルに書き込む。)
      try{
            File file = new File("c:\\Sample.txt");
      
            if (checkBeforeWritefile(file)){
              PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
      
              pw.println("今日の最高気温は");
              pw.println(10); //数値も文字としてファイルに書き込む。
              pw.println("度です");
      
              pw.close(); //ファイルを閉じる。
           }
      }

2009-6-5(Fri)13:20〜17:30

  • 初期サイズとして10個の要素が格納できるArrayList?が作成される。 (足りなくなれば自動的に拡張される。)
    ArrayList<型> 変数名 = new ArrayList<型>();
  • "<"と">"の間で、このArrayList?に格納する値の型を指定する。
  • "<"と">"の間にはクラス名を指定する。(基本型ではない。intやfroatは基本型。)
クラス基本型
Characterchar
Integerint
Floatfloat
Doubuledouble
  • 値の格納:ArrayList?クラスで用意されている"add"メソッドを使う。
  • 要素の取り出し:ArrayList?クラスで用意されている"get"メソッドを使う。
    public static void main(String args[]){
      ArrayList<String> array = new ArrayList<String>(); //ArrayListクラスのオブジェクトの作成。
    
      array.add("あ"); //インデックス番号"0"
      array.add("い"); //インデックス番号"1"
      array.add("う"); //インデックス番号"2"
      array.add("え"); //インデックス番号"3"
      array.add("お"); //インデックス番号"4"
    
      String country = array.get(2); //取り出す要素のインデックス番号を指定。
      System.out.println(country); //表示する。この場合は「う」。
    }
  • 応用
    package javaapplication1;
    
    import java.io.*;
    import java.util.ArrayList;
    
    class JSample1_1{
      public static void main(String args[]) throws IOException{
        ArrayList<String> array = new ArrayList<String>();
    
        array.add("小吉"); //0
        array.add("凶"); //1
        array.add("大吉"); //2
        array.add("末吉"); //3
        array.add("中吉"); //4
    
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("0〜4までで好きな数字を入力して下さい。");
    
        String suji=reader.readLine(); //入力された数字を"suji"に入れる。
        int a=Integer.parseInt(suji); //"String型"から"int型"に変換。
        String country = array.get(a); //インデックス番号"a"を取り出す。
        System.out.println("今日の運勢は"+country+"だよ!!"); //表示。
      }
    }
  • 格納されている要素数<http://www.javadrive.jp/start/arraylist/index2.html>
    • 現在格納されている要素数を確認するには"size"メソッドを使う。
      (配列とは違い、いくつの要素が格納されるか決まっていない。)
      System.out.println("登録データ数:" + array.size()); //全要素数を表示。
        for (int i = 0 ; i < array.size() ; i++){
          String country = array.get(i);
          System.out.println(country); //格納されてる要素を順に表示。
        }
  • 要素の置き換え<http://www.javadrive.jp/start/arraylist/index3.html>
    • 既に格納されている要素を別の要素で置き換えるには"set"メソッドを使う。
      array.set(2, "く"); //インデックス番号"2"の"う"を"く"に置き換える。
        for (int i = 0 ; i < array.size() ; i++){
          String country = array.get(i); 
          System.out.println(country); //格納されてる要素を順に表示。
        }
  • 応用
    package javaapplication1;
    
    import java.io.*;
    import java.util.ArrayList;
    
    class JSample1_1{
      public static void main(String args[]) throws IOException{
        ArrayList<String> array = new ArrayList<String>();
    
        array.add("小吉"); //0
        array.add("凶"); //1
        array.add("大吉"); //2
        array.add("末吉"); //3
        array.add("中吉"); //4
    
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("0〜4までで好きな数字を入力して下さい。");
    
        String suji=reader.readLine();
        int a=Integer.parseInt(suji);
        String country = array.get(a);
        System.out.println("今日の運勢は"+country+"だよ!!");
        
        String country1;
    
        a=(a+1)%5;
        country1 = array.get(a);
        
        /*
        if(a==4){
            country1 = array.get(0);
            array.set(0,country);
        }else{
            country1 = array.get(a+1);
            array.set(a+1,country);
        }
        */
        
        array.set(a,country1);
        System.out.println("明日の運勢は"+country1+"だよ!!");
      }
    }

Todo

今週の目標(6/18〜6/24)

  • Java:コレクション(ArrayList?)(100%)
    • 要素の検索
    • 要素の削除
  • Java:コレクション(LinkedList?)(100%)
    • LinkedList?クラス
    • 要素の格納と取り出し
    • 要素の置き換えと削除
    • 要素の検索
    • 待ち行列としての利用
  • Hさんにお礼のメール。ソースを見てコンパイルする。 (80%)

出来た事・分かった事

  • 要素の置き換えや削除、要素の検索に関しては、
    ArrayList?よりLinkedList?の方が比較的高速に処理できることが分かった。
  • H氏からのプログラムをコンパイルすることに成功。

問題点

  • H氏のプログラムの文字化けを直す方法が分からなかった。
    • 1つずつコピー&ペーストで書き換えた。

2009-6-18(Thu)13:05〜18:00

  • 要素の検索<http://www.javadrive.jp/start/arraylist/index4.html>
    • 指定した要素があるかどうかを検索するためには"indexOf"メソッドを使う。
    • 検索したい要素を引数に指定すると、格納されている要素の先頭から検索を行い、
      最初に見つかった要素のインデックス番号を返す。
    • 最後から検索する"lastIndexOf?"メソッドもある。
      メソッド機能
      indexOf格納されている要素の先頭から検索
      lastIndexOf?格納されている要素の最後から検索
      ArrayList<String> array = new ArrayList<String>();
      
      array.add("東京");
      array.add("大阪");
      array.add("東京");
      array.add("千葉");
      
      System.out.println(array.indexOf("東京"));      // 0が表示される
      System.out.println(array.lastIndexOf("東京"));  // 2が表示される
  • LinkedList?クラス<http://www.javadrive.jp/start/linkedlist/index1.html>
    • LinkedList?クラス:要素を追加したり削除したりすることが多い場合に適したクラス。
      要素の追加・削除要素を検索
      ArrayList?
      LinkedList?高速
    • LinkedList?クラスのオブジェクトを作成する。
      LinkedList?クラスのコンストラクタの1つは下記のようになっている。
      LinkedList
      public LinkedList()
    • LinkedList?のオブジェクトを作成する。(格納する要素の型を合わせて指定。)
      LinkedList<型> 変数名 = new LinkedList<型>();
  • H氏のプログラムをコンパイルしてみる。
    • NetBeansで開けない。(Javaのprojectにする方法が分からない。)
      • ドラッグ&ドロップで解決。
    • 日本語が文字化けしている。(Mac→Windowsのため?)
      • 上手く直らない。コピー&ペーストでしのぐ。

2009-6-19(Fri)13:20〜17:00

  • H氏のプログラムの文字化けが直らない理由を調べる。
    • 理由は分からない。コピー&ペーストで解決した。
  • 要素の削除<http://www.javadrive.jp/start/arraylist/index5.html>
    • 登録されている要素の中から指定したインデックス番号の要素を削除するには "remove"メソッドを使う。
    • 指定された位置から要素を削除する。次に後続の要素を左側に移動し それぞれのインデックスから 1 を減算する。
      (ArrayList?は削除される毎に先頭から詰めて配置しなおすため、 項目の追加や削除が遅くなる。)
      メソッド機能
      remove指定された要素を削除
      clear全ての要素を削除
      ArrayList<String> array = new ArrayList<String>();
      
      array.add("東京");
      array.add("大阪");
      array.add("東京");
      array.add("千葉");
      
      array.remove(1); //2番目の項目を削除
      array.clear(); //全ての項目を削除
  • 要素の格納と取り出し<http://www.javadrive.jp/start/linkedlist/index2.html>
    • 要素の格納には"add"メソッドを使う。
    • 要素の取り出しには"get"メソッドを使う。
      メソッド機能
      add要素の格納
      get要素の取り出し
      LinkedList<String> array = new LinkedList<String>();
      
      array.add("日本"); //インデックス番号"0"に"日本"を格納。
      array.add("ブラジル"); //インデックス番号"1"に"ブラジル"を格納。
      array.add("イングランド"); //インデックス番号"2"に"イングランド"を格納。
      
      array.add(1, "ポルトガル"); //インデックス番号"1"に"ポルトガル"を追加。
      
      String country = array.get(2); //"ブラジル"を表示。
  • 要素の置き換えと削除<http://www.javadrive.jp/start/linkedlist/index3.html>
    • 要素の置き換えには"set"メソッドを使う。
    • 要素の削除には"remove"メソッドを使う。
    • 全ての要素の削除には"clear"メソッドを使う。(ArrayList?より比較的高速。)
      メソッド機能
      set要素の置き換え
      remove要素の削除
      clear要素の全削除
      LinkedList<String> array = new LinkedList<String>();
      
      array.add("日本");
      array.add("ブラジル");
      array.add("イングランド");
      
      array.set(1, "イタリア"); //インデックス番号"1"を"イタリア"に置き換え。
      
      array.remove(0); //インデックス番号"0"の"日本"を削除。
  • 要素の検索<http://www.javadrive.jp/start/linkedlist/index4.html>
    • LinkedList?に登録されている要素の中から、指定した要素を検索する。 (基本的にArrayList?の時と同じ。)
    • ArrayList?と異なり要素の再配置は行われないため、比較的高速に行われる。
      LinkedList<String> array = new LinkedList<String>();
      
      array.add("日本");
      array.add("ブラジル");
      array.add("東京");
      array.add("イングランド");
      
      System.out.println(array.indexOf("日本")); //"日本"のインデックス番号"0"を表示。
      System.out.println(array.lastIndexOf("東京")); //"東京"のインデックス番号"2"を表示。
  • 待ち行列としての利用<http://www.javadrive.jp/start/linkedlist/index5.html>
    • LinkedList?は、キューとしても利用できるようになっている。
      (キュー:先入れ先出し法(FIFO)と呼ばれる方式の一つ。先に追加されたデータが最初に処理されるというもの。)
    • 新しい要素をリストの最後に追加するには"offer"メソッドを使う。
    • リストの先頭から要素を取り出すには"peek"メソッドを使う。
      メソッド機能
      offer要素をリストの最後に追加
      peekリストの先頭から要素を取り出す
      elementリストの先頭から要素を取り出す(要素が無いのに取り出そうとした場合は例外を投げる)
      poll先頭の要素を取り出しつつ同時に先頭の要素を削除する(要素が無い場合はNULLを返す)
      remove先頭の要素を取り出しつつ同時に先頭の要素を削除する(要素が無い場合は例外を投げる。)
      LinkedList<String> array = new LinkedList<String>();
      
      array.offer("色が違う");
      array.offer("サイズが合わない");
      array.offer("壊れていた");
      
      System.out.println(array.poll());
      System.out.println(array.poll());
      
      array.offer("商品が違う");
      
      System.out.println(array.poll());
      System.out.println(array.poll());

Todo

今週の目標(6/25〜7/1)

  • Java:コレクション(HashMap?)(100%)
    • HashMap?クラス
    • 要素の格納と取り出し
    • 要素の削除
  • Java:クラスとは何か(100%)
    • クラスとは
    • クラスからオブジェクトを作る
    • クラスを利用してみる
    • mainメソッドとクラスの関係
  • Hさんのプログラムを読んでみる。(%)
  • <http://gihyo.jp/dev/serial/01/javafx>の第9回まで

出来た事・分かった事


問題点

2009-6-25(Thu)13:20〜16:00

  • HashMap?クラス<http://www.javadrive.jp/start/hashmap/index1.html>
    • HashMap?:連想配列とも呼ばれ、キーとなる文字列と要素がペアになっている。
      (「りんご」というキーに対応する要素は「Apple」)
      要素を登録する時に、それに対するキーを文字列などで指定し、要素を検索したり取り出す時はキーを使って要素を指定する。
  • HashMap?の場合は型を2つ指定する。1つ目はキーの型、2つ目は格納する要素の型なる。
    HshMap<型1,型2> 変数名 = new HashMap<型1,型2>();
  • 要素の格納と取り出し<http://www.javadrive.jp/start/hashmap/index2.html>
    • 要素を格納するには"put"メソッドを使う。
    • 要素とそれに対応するキーをマップに登録する。既にキーが登録されていた場合は、
      そのキーに対応する要素をこのメソッドで指定した要素に置き換える。
      HashMap<String,String> map = new HashMap<String,String>();
      
      map.put("りんご", "apple"); //キー:りんご。要素:apple。
      map.put("ぶどう", "grapes"); //キー:ブドウ。要素:grapes。
    • 要素を取り出すには"get"メソッドを使う。
    • キーを指定し、そのキーに対応した要素を取り出す。
      HashMap<String,String> map = new HashMap<String,String>();
      
      map.put("りんご", "apple");
      map.put("ぶどう", "grapes");
      
      System.out.println(map.get("りんご")); //りんごに対応した要素"apple"を取り出す。
    • 要素を指定するためのキーがマップに登録されているかどうかを確認するには"containsKey"メソッドを使う。
      HashMap<String,String> map = new HashMap<String,String>();
      
      map.put("りんご", "apple");
      map.put("ぶどう", "grapes");
      
      if (map.containsKey("りんご")){ //キーがマップに登録されているか確認。
        System.out.println(map.get("りんご")); //要素appleを取り出している。
      }else{
        System.out.println("指定したキーは存在しません"); //指定したキーが存在しないことを表示。
      }
  • 要素の削除<http://www.javadrive.jp/start/hashmap/index3.html>
    • マップから要素を削除するには"remove"メソッドを使う。
    • 全ての要素をまとめて削除する場合には"clear"メソッドを使う。
      map.remove("ぶどう"); //"ぶどう"を削除。

2009-6-26(Fri)13:20〜00:00

  • Java:クラスとは何か<http://www.javadrive.jp/start/about/index.html>
    • クラスとは設計図のこと。実際に動かすには 設計図を元に実物(オブジェクト)を作る必要あり。
      クラス名 変数名 = new クラス名(引数);
    • mainメソッド:このメソッド内で他のクラスのオブジェクトを作成する。
    • static:システム側でプログラム開始時に用意してくれるメソッド。

Todo