hikiderのノート

2008-05-21

パソコン甲子園を受けてみようかと 02:02 パソコン甲子園を受けてみようかと - hikiderのノート を含むブックマーク パソコン甲子園を受けてみようかと - hikiderのノート のブックマークコメント

思ってるんですが、それには自分の能力やセンスが圧倒的に足りないです。

さらに、予選すら出れないし解けない感が濃厚です。


続きを読む

2008-05-13

また駄プログラム 00:12 また駄プログラム - hikiderのノート を含むブックマーク また駄プログラム - hikiderのノート のブックマークコメント

また自己満プログラム

import java.util.HashMap;
import java.util.Map;

/*Generic使ったファクトリー*/
public class Factory<T ,K> {
  /*キーと生成方法をペアにする。*/
  private Map<T,NewObject<K>> map;

  /*生成方法を定義するためのインターフェイス。テキトーにキャストしてね。*/
  public interface NewObject<K>{
    public K newObject(Object[] args);
  }

  /*コンストラクタ。言わずもがなですね。*/
  public Factory(){
    map = new HashMap<T,NewObject<K>>();
  }

  /*キーに生成方法を登録するメソッド。*/
  public void register(T type,NewObject<K> o){
    map.put(type, o);
  }

  /*生成方法を使ってクラスを生成するメソッド。*/
  public K create(T type,Object[] args){
    NewObject<K> k = map.get(type);
    return k.newObject(args);
  }

  /*上のargsをnullで渡すだけ*/
  public K create(T type){
    NewObject<K> k = map.get(type);
    return k.newObject(null);
  }	
}

LokiのFactoryを参考に作ってみた…。

だが、SingleTonにするいい方法が思いつかない…。


使い方はこんな感じ。

//テキトーなくらす
abstract class Person{
  public abstract String toString();
}

//ポリモルフィズムのための実験台のクラス2つ
class Man extends Person{
  public String toString(){
    return "男"
  }
}

class Lady extends Person{
  public String toString(){
    return "女"
  }
}

//このクラスを実行するよ
public class Test {

  public static void main(String[] args) {
    Factory<Integer, Person> f = new Factory<Integer,Person>();
    //0でManを登録
     f.register(0, new Factory.NewObject<Person>(){
                    public Person newObject(Object[] args) {
                      return new Man();
                    }
                  });
    //1でLadyを登録
     f.register(1, new Factory.NewObject<Person>(){
                    public Person newObject(Object[] args) {
                      return new Lady();
                    }
                  });
    //表示
     System.out.println(f.create(0));
    System.out.println(f.create(1));

  }
}

で、ちゃんと



と表示される。

こんなテキトーなもので本当にすみません…。誰かアドバイスお願いします…。


追記(2008/5/21)

結局、別のFactoryでこのオブジェクトに移譲して型を決定しないとSingleTonは無理そうです。

それか型のClassクラスでFactoryを判別してキャッシュするようにするしかないかな。

まあ、前者のほうが利口ですね。

2008-05-11

プログラム 00:35 駄プログラム - hikiderのノート を含むブックマーク 駄プログラム - hikiderのノート のブックマークコメント

テキトーに自己満プログラムを書いてみた。


/*ループ処理用のクラス*/
public class Loop{
  /*回数の条件用インターフェイス。trueの間続ける*/ 
  public interface Condition{ 
    public boolean condition(int n); 
  } 
  /*あとにすることを決めるインターフェイス*/ 
  public interface Body{ 
    public void body(int n); 
  }

  /*ループ構文*/ 
 public static void loop(int num,int step,Condition cond,Body body){ 
    /*条件から外れたら終了*/ 
    if(cond.condition(num) == false){ 
      return; 
    } 

    /*条件の中だったら実行*/ 
    body.body(num); 
  
     /*再帰します。*/ 
    loop(num+step,step,cond,pre); 
    return; 
  } 
}

こんな感じにすればSchemeみたいに組めるのかな?と。

で、FizzBuzzやってみると…。

public class FizzBuzz { 
  public static void main(String[] args) { 
    Loop.loop(1, 1, new Loop.Condition(){ 
                         public boolean condition(int n){ 
                        if(n <= 100){ 
                          return true; 
                        } 
                        return false; 
                      }
                    } 
                  , new Loop.Body(){ 
                      public void body(int n){ 
                        if((n % 15) == 0){ 
                          System.out.println("FizzBuzz"); 
                        }else if((n % 5) == 0){ 
                          System.out.println("Buzz"); 
                        }else if((n % 3) == 0){ 
                          System.out.println("Fizz"); 
                        }else{ 
                          System.out.println(n); 
                        } 
                      } 
                    }); 
  
 } 
} 

一応ちゃんと出力できます。


1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,

11,Fizz,13,14,FizzBuzz,16,17,Fizz,19,Buzz,

Fizz,22,23,Fizz,Buzz,26,Fizz,28,29,FizzBuzz,

31,32,Fizz,34,Buzz,Fizz,37,38,Fizz,Buzz,

41,Fizz,43,44,FizzBuzz,46,47,Fizz,49,Buzz,

Fizz,52,53,Fizz,Buzz,56,Fizz,58,59,FizzBuzz,

61,62,Fizz,64,Buzz,Fizz,67,68,Fizz,Buzz,

71,Fizz,73,74,FizzBuzz,76,77,Fizz,79,

Buzz,Fizz,82,83,Fizz,Buzz,86,Fizz,88,89,FizzBuzz,

91,92,Fizz,94,Buzz,Fizz,97,98,Fizz,Buzz


まあ、こんなこと猿でもできるプログラムですけど…。

2008-05-10

自己しょうかい 21:51 自己しょうかい - hikiderのノート を含むブックマーク 自己しょうかい - hikiderのノート のブックマークコメント

どうしても周りにいる人に比べて見劣りするような特徴しかないですが・・・。



是非、よろしくお願いします。(><)

rosylillyrosylilly2008/05/10 22:59TwitterでFollowしました!よろしくおねがいします><

hikiderhikider2008/05/10 23:15こちらこそよろしくお願いします><