[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00687] Re: お助けください。



------------------------- infoseek ML Sponsor --------------------------
┏━┳━┳━┳≪資格の大原 合格Web 税理士講座 ≫━┳━┳━┳━┳━┓
┃大┃原┃税┃理┃士┃講┃座┃!┃合┃格┃者┃の┃84┃%┃が┃受┃講┃
┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛
★パソコンさえあれば自宅で学べるのが合格Web!24時間いつでも何度でも受講
┗ http://www1.ibc.ne.jp/ad/ibc0088.html 
------------------------------------------------------------------------



お返事、ありがとうございます。フジタです。

実は、一応完成しているのですが・・・
親パスの取得にVectorとスタックを使うというごり押しのコードに
してしまったので、printListに変数を渡す形に変更しています(^_^;)

変数(sizeとname)は、protectedにしてEntryクラスで宣言する形に変えました。

>サイズ合計の変数を持っておき、再帰的に探索して加算するしかなさそうです。
容量計算は、再帰処理になっています。

ご迷惑を、お掛けしたついでに変更コードをあげておきます。
本当に下手なコードですが、ご了承ください(^_^;)

*Entryクラス
public abstract class Entry {
    protected Entry oya;
    protected int size;
    protected String name;
    public abstract String getName();                               // 名前
を得る
    public abstract int getSize();                               // サイズ
を得る
    public Entry add(Entry entry) throws FileTreatmentException {   // エン
トリを追加する
        throw new FileTreatmentException();
    }
    protected abstract void printList();
    public String toString() {                                      // 文字
列表現
        return getName();
    }
}

*Directoryクラス
import java.util.*;

public class Directory extends Entry {
    // private String name;                    // ディレクトリの名前
    // private int size;
    private Vector directory = new Vector();      // ディレクトリエントリの
集合
    private Entry test;      // テストエントリ
    private Stack test1 = new Stack();      // テストエントリの集合
    public Directory(String name) {         // コンストラクタ
        this.name = name;
    }
    public String getName() {               // 名前を得る
        return name;
    }
    public Entry add(Entry entry) {         // エントリの追加
        directory.add(entry);
     entry.oya = this;
        return this;
    }
    protected void printList() {       // エントリの一覧
     // this.getSize();
     size = this.getSize();
        System.out.println("\\"+this+" ("+this.size+")");
        Iterator it = directory.iterator();
        while (it.hasNext()) {
         test = this.oya;
         while(true){
          if(test != null){
               test1.push(test);   // 親のエントリをスタックに追加
               test = test.oya;
          }else{
               break;
          }
         }
         while(true){
          if(!test1.empty()){
               test = (Entry)test1.pop();
               System.out.print("\\"+test);
          }else{
               break;
          }
         }
         Entry entry = (Entry)it.next();
            System.out.print("\\"+this);
            entry.printList();
        }
    }

    public int getSize() {
     this.size = 0;
        Iterator it = directory.iterator();
        while (it.hasNext()) {
         Entry entry = (Entry)it.next();
         this.size += entry.getSize();
         // getSize();
        }
     return size;
    }

}

*Fileクラス
public class File extends Entry {
    // private String name;
    // private int size;
    public File(String name, int size) {
        this.name = name;
        this.size = size;
    }
    public String getName() {
        return name;
    }
    public int getSize() {
        return size;
    }
    protected void printList() {
        System.out.println("\\"+this+" ("+this.size+")");
    }
}



------------------------------------------------------------------------
      ★秋風が心地よいこの季節 “住み替え”の季節です!
    http://house.www.infoseek.co.jp/House/top?sv=RF&svx=971122