where the amazing happens

          算法1 : 遞歸

          一個簡單的遞歸程序,它讀取給定目錄下所有文件,然后以樹型的方式在屏幕上打印出來.昨天斷斷續續得花了1個多小時寫出來

          讀取文件

          package ?test;
          import ?java.io. * ;
          import ?java.util. * ;

          /**
          ?*???Put?files?into?a?tree
          ?*?
          */

          public ? class ?ReadFilesAndBuiltTree? {
          ????
          ????
          static ? class ?Node {
          ????????
          private ?Node?father;
          ????????
          private ?List?children;
          ????????
          private ?File?data;
          ????????
          public ?Node() {
          ????????????children?
          = ? new ?Vector();
          ????????}

          ????????
          public ?File?getData()? {
          ????????????
          return ?data;
          ????????}

          ????????
          public ? void ?addChild(Node?c) {
          ????????????
          this .getChildren().add(c);
          ????????}

          ????????
          public ? void ?setData(File?data)? {
          ????????????
          this .data? = ?data;
          ????????}

          ????????
          public ?List?getChildren()? {
          ????????????
          return ?children;
          ????????}

          ????????
          public ? void ?setChildren(List?children)? {
          ????????????
          this .children? = ?children;
          ????????}

          ????????
          public ?Node?getFather()? {
          ????????????
          return ?father;
          ????????}

          ????????
          public ? void ?setFather(Node?father)? {
          ????????????
          this .father? = ?father;
          ????????}

          ????????
          public ? boolean ?hasChildren() {
          ????????????
          return ?children.size() > 0 ;
          ????????}

          ????????
          public ?Node?getChile( int ?index) {
          ????????????
          return ?(Node)children.get(index);
          ????????}

          ????????
          public ?Node?getChild(String?fname) {
          ????????????Iterator?i?
          = ?getChildren().iterator();
          ????????????
          while (i.hasNext()) {
          ????????????????Node?bn?
          = ?(Node)i.next();
          ????????????????String?n?
          = ?
          ????????????????????bn.getData().getName();
          ????????????????
          if (n.equals(fname)) return ?bn;
          ????????????}

          ????????????
          return ? null ;
          ????????}

          ????????
          public ?List?getDirChildren() {
          ????????????List?c?
          = ? new ?Vector();
          ????????????
          for ( int ?i? = ? 0 ?;?i? < children.size();i ++ ) {
          ????????????????Node?n?
          = ?(Node)children.get(i);
          ????????????????
          if (
          ??????????????????n.getData().isDirectory()????????
          ????????????????)c.add(n);
          ????????????}

          ????????????
          return ?c;
          ????????}

          ????????
          public ?List?getFileChildren() {
          ????????????List?c?
          = ? new ?Vector();
          ????????????
          for ( int ?i? = ? 0 ?;?i? < children.size();i ++ ) {
          ????????????????Node?n?
          = ?(Node)children.get(i);
          ????????????????
          if (
          ??????????????????
          ! n.getData().isDirectory()????????
          ????????????????)c.add(n);
          ????????????}

          ????????????
          return ?c;
          ????????}

          ????}

          ????
          ????
          private ?ReadFilesAndBuiltTree() {}
          ????
          ????
          public ? static ?Node?getTree(File?rootDir) {
          ????????Node?r?
          = ? new ?Node();
          ????????r.setData(rootDir);
          ????????
          return ? new ?ReadFilesAndBuiltTree().builtTree(r);
          ????}

          ????
          ????
          private ?Node?builtTree(Node?root) {
          ????????
          if ( ! root.getData().isDirectory()) return ?root;
          ????????File?f?
          = ?root.getData();
          ????????File[]?fs?
          = ?f.listFiles();
          ????????
          for ( int ?i? = ? 0 ?;?i? < ?fs.length?;?i ++ ?) {
          ????????????File?ff?
          = ?fs[i];
          ????????????Node?n?
          = ? new ?Node();
          ????????????n.setData(ff);
          ????????????n.setFather(root);
          ????????????root.addChild(builtTree(n));
          ????????}

          ????????
          return ?root;
          ????}

          ????
          ????
          public ? static ? void ?main(String[]?args) throws ?Exception {
          ????????Node?root?
          = ?getTree( new ?File(ShowFileDir.ROOT_DIR));
          ????????Node?cn?
          = ?root.getChild( " maps " );
          ????????System.out.println(cn.getChildren().size());
          ????}

          ????
          }


          輸出文件
          package?test;
          import?java.io.File;
          import?java.util.Iterator;
          import?java.util.List;

          import?test.ReadFilesAndBuiltTree.Node;

          /**
          ?*??Print?the?tree?to?screen
          ?*?
          */

          public?class?ShowFileDir?{
          ????
          ????
          public?static?String?ROOT_DIR?=?"E:/y音樂";
          ????
          ????
          public?ShowFileDir(){
          ????}

          ????
          ????
          public?void?printNodes(){
          ???????Node?root?
          =?ReadFilesAndBuiltTree.getTree(new?File(ROOT_DIR));
          ???????printNode(root,
          0);
          ????}

          ????
          ????
          private?void?printNode(Node?root,int?depth){
          ????????
          if(!root.hasChildren())return;
          ????????pd(root.getData().getName(),depth);
          ????????pindent(
          ++depth);
          ????????List?l?
          =?root.getFileChildren();
          ????????pc(l,depth);
          ????????l?
          =?root.getDirChildren();
          ????????
          for(int?i?=?0?;?i?<?l.size()?;?i++){
          ????????????Node?c?
          =?(Node)l.get(i);
          ????????????printNode(c,depth);
          ????????}

          ????}

          ????
          //?Screen?methods????
          ????private?void?pc(List?l,int?count){
          ????????Iterator?i?
          =?l.iterator();
          ????????
          while(i.hasNext()){
          ????????????Node?n?
          =?(Node)i.next();
          ????????????pp(count);
          ????????????p(
          "+"+n.getData().getName()+"\n");
          ????????}

          ????}

          ????
          ????
          private?void?pd(String?t,int?depth){
          ????????String?spc?
          =?"";
          ????????
          for(int?i?=?0;?i<?depth;?i++)spc+="-";
          ????????p(spc
          +"+"+t+"\n");
          ????}

          ????
          ????
          private?void?pindent(int?depth){
          ????????String?spc?
          =?"";
          ????????
          for(int?i?=?0;?i<?depth;?i++)spc+="?";
          ????????System.out.println(spc
          +"|");
          ????}

          ????
          ????
          private?void?pp(int?count){
          ????????
          for(int?i?=?0?;?i?<?count?;?i++)p("?");
          ????}

          ????
          ????
          private?void?p(String?s){System.out.print(s);}
          ????
          ????
          public?static?void?main(String[]?args)throws?Exception{
          ????????ShowFileDir?sfd?
          =?new?ShowFileDir();
          ????????sfd.printNodes();
          ????}

          }



          2個類,一個負責讀.一個負責寫.
          輸出結果:

          +y音樂
          ?|
          -+歐美
          ? |
          ? +WeAreTheWorld.txt
          ? +WeAreTheWorld.wmv
          ? +WhereAreYou!.txt
          ? +jeanny_3.mp3
          ? +blood-upon-the-risers.mp3
          ? +Broken Down Angel.txt
          ? +Love Hurts.txt
          ? +Broken Down Angle.mp3
          ? +Love Hurts.mp3
          ? +Celien Dion - God Bless America.mp3
          ? +SS閃電部隊在前進.mp3
          ? +The_Sun_Is_Burning_Simon_and_Garfunkel.mp3
          ? +vitas.-.opera02.rm
          ? +chivas we could be together.wma
          ? +綠色椅子.mp3
          ? +come away with me-norah jones.wma
          ? +the sound of silence.mp3
          --+live from new york city,1967-simon&garfunkel
          ?? |
          ?? +a church is burning.mp3
          ?? +a hazy shade of winter.mp3
          ?? +a most peculiar.mp3
          ?? +a poem on the underground wall.mp3
          ?? +anji.mp3
          ?? +benedictus.mp3
          ?? +blessed.mp3
          ?? +for emily,whenever I may find her.mp3
          ?? +he was my brother.mp3
          ?? +howeward bound.mp3
          ?? +I am a rock.mp3
          ?? +leaves that are green.mp3
          ?? +richard cory.mp3
          ?? +sparrow.mp3
          ?? +the 59th street bridge song.mp3
          ?? +the dangling conversation.mp3
          ?? +the sound of silence.mp3
          ?? +wednesday morning,3A.M.mp3
          ?? +you don't know where your interest lies.mp3
          -+其他
          ? |
          ? +StarCraft - Techno Mix.mp3
          ? +牽手.mp3
          ? +螢火蟲 .mp3
          ? +njsw.mp3
          ? +zeldaN64.rar


          這是算法系列的第一篇,下一個準備寫動態規劃的.

          posted on 2006-04-23 05:00 where the amazing happens 閱讀(906) 評論(1)  編輯  收藏 所屬分類: 算法&數據結構

          評論

          # re: 算法1 : 遞歸[未登錄] 2008-01-20 13:10 無名

          private ReadFilesAndBuiltTree() {}
          你這里為什么要用private來定義構造函數呢  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          公告

          點擊這里給我發消息

          導航

          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(18)

          隨筆檔案(17)

          文章分類

          相冊

          其他我的blog

          技術Blog

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 定西市| 安国市| 上杭县| 合山市| 德清县| 万全县| 富民县| 佳木斯市| 醴陵市| 玛多县| 永春县| 田林县| 平罗县| 望都县| 保定市| 方山县| 平山县| 娄烦县| 满城县| 昂仁县| 高陵县| 会宁县| 莎车县| 昌吉市| 仁寿县| 普陀区| 沙田区| 平邑县| 张家口市| 丰原市| 资溪县| 泸西县| 新余市| 南华县| 霍林郭勒市| 平山县| 济宁市| 渑池县| 阳新县| 揭东县| 镇康县|