ぼんさい塾

ぼんさいノートと補遺に関する素材や注釈です.ミスが多いので初稿から1週間を経た重要な修正のみ最終更新日を残しています.

Java のプログラム (14)

2011-10-10 14:51:01 | 暮らし
記事一覧
ソースコードについて


P34-1/2: インターフェイス
//-------------------------------------------
//TreeS2.java
package lib;
interface Edit1 {
    String sn = "氏名:"; String sp = "電話:";
    Node edit(int k, String s0, String s1);
}
interface Edit2 extends Edit1 {
    String sa = "住所:";
    Node edit(int k,
            String s0, String s1, String s2);
}
class TreeS1 extends TreeS implements Edit1 {
    Node search(Node q, int k){
        Node p = q;
        while(p != null){
            if(p.d < k) p = p.r;
            else if(p.d > k) p = p.l;
            else break;
        }
        return p;
    }
    public Node edit(int k, String s0, String s1){
        Node p = search(top.r, k);
        if(p == null) return null;
        if(p.s == null) p.s = new String[4];
        p.s[0] = sn + s0; p.s[1] = sp + s1;
        p.s[2] = p.s[3] = null; return p;
    }
    public void show(int k){
        Node p = search(top.r, k);
        System.out.print("#" + k + " ");
        if(p == null){
            System.out.println("?"); return;
        }
        for(int i=0; i<4; i++) if(p.s[i] != null){
                System.out.print(p.s[i] + " ");
        }
        System.out.println();
    }
}
public class TreeS2
        extends TreeS1 implements Edit2 {
    //public TreeS2(){} //デフォルトで生成.
    public Node edit(
            int k, String s0, String s1, String s2)
    {
        Node p = search(top.r, k);
        if(p == null) return p;
        super.edit(k, s0, s1); p.s[2] = sa + s2;
        return p;
    }
}
//-------------------------------------------

 
P34-1/2 の Edit1,Edit2 は Node の s で参照される文字
列の配列のデータを編集するためのインターフェイスです.
これらの edit() は TreeS を継承した TreeS1,TreeS2 で
実装されます.

・インターフェイスでは変数は宣言できません.Edit1 の
  "氏名" はオブジェクトのインスタンスではなく,静的に
  格納されます.インターフェイスでのメソッドの宣言は
  Cでの関数のプロトタイプ宣言と似ていますが,型だけ
  を書くとエラーになります.
・インターフェイスを実装するときはすべてのメソッドを
  定義しなければなりません.
・Edit2 の実装で Edit1 の edit() を使いたいときは左記
  のように super.edit() とします.
・show(int k) は TreeS の show() と引数が違うのでオー
  バーライドではなくてオーバーロードです.
  

P34-2/2: 使用例
//-------------------------------------------
//TreeS
  P31-1/2 と同じ
//-------------------------------------------
//Main.java
package chk;
import lib.*;
public class Main {
    public static void main(String[] args) {
        TreeS2 t = new TreeS2();
        t.insert(7); t.insert(3); t.insert(9);
        t.insert(2); t.insert(5);
        t.edit(2, "山田太郎", "090-12345678");
        t.show(); t.show(2);
    }
//-------------------------------------------

実行結果
//-------------------------------------------
run:
 LL:  2
 L:  3
 LR:  5
 :  7
 R:  9

#2 氏名:山田太郎 電話:090-12345678 
構築成功 (合計時間: 0 秒)
//-------------------------------------------




HTMLエディタ

2011-10-10 10:08:10 | 暮らし

http://blog.goo.ne.jp/bonsai-juku/e/be6923195e439938e14d9315f3be9446 のバグ(?)が分かりました.show(int k) の「#」を全角に修正しました.

参考:

<PRE>
    public void show(int k){
        Node p = search(top.r, k);
        System.out.print("#" + k + " ");
        if(p == null){
            System.out.println("?"); return;
        }
        for(int i=0; i < 4; i++) if(p.s[i] != null){
                System.out.print(p.s[i] + " ");
        }
        System.out.println();
    }
</PRE>

の「<」「>」「#」を半角に変えて実行する次のエラーになり,もどると記事が消えています.

Web サイト側でページを表示できません
 HTTP 500 
   可能性のある原因:
•Web サイトがメンテナンス中である。
•Web サイトに、プログラム上の問題がある。

AN HTTP Server Errors
  http://homepage1.nifty.com/yito/anhttpd/error.html#500