Up

オブジェクトを繋ぐ

 

クラス型の変数をポインタとして使って、オブジェクトを繋いでみた(図1)

 

図1

 

図1のクラス型Nodeは、以下のように宣言されている。

 

class Node {

              Node p = null;

              String data;

}

 

Node型のクラス内に同じNode型の変数 p を置いて、p によって次のNode型のオブジェクトを指し示す。使用例として、以下のプログラムを作成した。

 

package Chain;

 

import java.io.BufferedReader;

import java.io.InputStreamReader;

//

//                      ノード用クラス型

//

class Node {

        Node p = null;          //              次のノードを指し示すポインタとして使用

        String data;            //              文字列データを格納

}

 

public class Chain {

       

        public static void main(String args[]){

                Node s_node;                            //              繋がれたノードのチェインの先頭を指し示す

                Node t_node;                            //              現在のノードを指し示す

                t_node = s_node = null;         //              初期値は null

                int ck_s = 1;                           //              最初のノードが作成されば 0  に設定

                try{

                        //

                        //              キーボードからの読み込み用ストリーム cin の設定

                        //

                        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));

                        while(true){

                                //

                                //              データの読み込み

                                //

                                System.out.print("Data = ");

                                String str = cin.readLine();

                                if (str.length() == 0) break;           //              読み込んだ文字列が空 "" であれば、入力の終了

                                if (ck_s == 1){                                         //              最初のノードの作成

                                        t_node = s_node = new Node();   //              作成された最初のノードを指し示す

                                        ck_s = 0;                                               //                最初のノードが作成されたので、0 を設定

                                } else {

                                        t_node.p = new Node();          //              次のノードを作成して、変数 p が指し示すようにする

                                        t_node = t_node.p;              //              作成した次のノードを t_node が指し示すようにする

                                }

                                t_node.data = str;                      //              新しく作成されたノードの data に読み込んだ文字列を設定

                                t_node.p = null;                        //              新しく作成されたノードの p null を設定して、繋がったノードの最後尾であることを示す

                        }

                }

                catch(Exception e){

                        System.out.println("Exception is thrown.");

                        System.out.println(e.toString());

                        return;

                }

                System.out.println("\nInput data...");

                if (s_node != null){                                            //              s_node の値が null のときは、入力データがない

                        t_node = s_node;                                        //              ノードの繋がりの先頭を t_node が指し示すようにする

                        while(true){

                                System.out.println(t_node.data);                //              ノードのデータ data の出力

                                if (t_node.p == null) break;                    //              t_node が最後のノードを指し示していれば while 文から抜け出す

                                t_node = t_node.p;                                              //                t_node に、次のノード t_node.p を設定

                        }

                }

                System.out.println("<End of Data>");

        }

 

}

 

上のパッケージファイルは、圧縮ファイルsrc_chain.zipとして用意した。圧縮ファイルsrc_chain.zipのダウンロード・解凍したのものの利用についてはこのウェブサイトで説明している。

図2に実行例を示す。

図2

 

Data =」と聞いてきたら、文字列を打ち込む。何も文字キーを打たないで、Enterキーを押すと、入力の終了とみなされ、それまで入力した文字列が出力される。

 

 

Up