和風細雨

          世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

          現實中軍隊樹狀結構的實現

          抽象單位類,Soldier和TroopUnit的基類:
          package com.sitinspring;

          /**
           * 抽象單位類,Soldier和TroopUnit的基類
           * 
          @author sitinspring(junglesong@gmail.com)
           *
           * @date 2007-12-4
           
          */

          public abstract class Unit {
              
          // 單位名
              protected String name;

              
          // 所在單位
              protected TroopUnit currTroopUnit;

              
          protected static final String TAB = "    ";

              
          public Unit(String name) {
                  
          this.name = name;
              }


              
          // 打印信息,強制子類實現
              public abstract void printInfo(String tabs);

              
          // 取得單位的絕對路徑
              public String getPath() {
                  StringBuffer sb 
          = new StringBuffer();

                  TroopUnit troopUnitointer 
          = currTroopUnit;

                  
          if (troopUnitointer == null{
                      
          return "頂級";
                  }

                  
          while (troopUnitointer != null{
                      
          // 取得的單位名放置在前方
                      sb.insert(0, troopUnitointer.name + "/");

                      
          // 繼續向上回溯
                      troopUnitointer = troopUnitointer.currTroopUnit;
                  }


                  
          return sb.toString();
              }


              
          public void setCurrTroopUnit(TroopUnit currTroopUnit) {
                  
          this.currTroopUnit = currTroopUnit;
              }


              
          public void setName(String name) {
                  
          this.name = name;
              }


              
          public TroopUnit getCurrTroopUnit() {
                  
          return currTroopUnit;
              }


              
          public String getName() {
                  
          return name;
              }

          }

          Soldier類:
          package com.sitinspring;

          /**
           * Soldier類,繼承自Unit
           * 
          @author sitinspring(junglesong@gmail.com)
           *
           * @date 2007-12-4
           
          */

          public class Soldier extends Unit{
              
          public Soldier(String name){
                  
          super(name);
              }

              
              
          /**
               * 打印士兵的信息
               
          */

              
          public void printInfo(String tabs){
                  System.out.println(tabs
          +" 士兵名="+name+" path="+getPath());
              }

          }


          軍事建制單位類:
          package com.sitinspring;

          import java.util.ArrayList;
          import java.util.List;

          /**
           * 軍事建制單位類,繼承自Unit
           * 
          @author sitinspring(junglesong@gmail.com)
           *
           * @date 2007-12-4
           
          */

          public class TroopUnit extends Unit{
              
          // 屬下的單位集合,包括士兵及建制單位
              private List<Unit> units;
              
              
          public TroopUnit(String name) {
                  
          super(name);
              }

              
          // 刪除一個單位
              public void remove(Unit unit) {
                  units.remove(unit);
              }

              
              
          // 添加一個單位
              public void add(Unit unit) {
                  
          if (units == null{
                      units 
          = new ArrayList<Unit>();
                  }


                  units.add(unit);

                  
          // 設置添加單位的所在單位為自身
                  unit.setCurrTroopUnit(this);
              }

              
              
          /**
               * 按名字查找
               * 
          @param name
               * 
          @param foundUnits
               
          */

              
          public void findbyName(String name,List<Unit> foundUnits) {
                  
          // 對空目錄進行檢查,以防空指針異常發生
                  if (units == null{
                      
          return;
                  }


                  
          // 遍歷查找
                  for (Unit unit : units) {
                      
          if (unit instanceof TroopUnit) {
                          
          // 找到目錄
                          TroopUnit troopUnit = (TroopUnit) unit;

                          
          if (troopUnit.units == null
                                  
          || troopUnit.units.size() == 0{
                              
          continue ;
                          }
           else {
                              
          // 有子單位則繼續向下遞歸遍歷
                              troopUnit.findbyName(name,foundUnits);
                          }


                      }
           else {
                          Soldier soldier 
          = (Soldier) unit;

                          
          if (soldier.getName().contains(name)) {
                              foundUnits.add(soldier);
                          }

                      }

                  }

              }

              

              
          /**
               * 打印單位信息,包括其下包括的單位
               
          */

              
          public void printInfo(String tabs) {
                  
          // 輸出本身的信息
                  System.out.println(tabs + " 單位名=" + name + " path=" + getPath());

                  
          // 對屬下的單位集合進行檢查,以防空指針異常發生
                  if (units == null{
                      
          return;
                  }


                  
          // 將屬下的單位集合中的文件目錄信息也打印出來
                  for (Unit unit : units) {
                      
          // tabs + TAB是讓下到一層目錄就縮進一次
                      unit.printInfo(tabs + TAB);
                  }

              }

          }


          調用:
          package com.sitinspring;

          import java.util.ArrayList;
          import java.util.List;

          /**
           * 程序入口
           * 
          @author sitinspring(junglesong@gmail.com)
           *
           * @date 2007-12-4
           
          */

          public class Main{
              
          public static void main(String[] args){
                  
          // 一級一級的建立體系結構
                  Soldier xsd=new Soldier("許三多");
                  TroopUnit sanban
          =new TroopUnit("三班");
                  sanban.add(xsd);
                  
                  Soldier xsd1
          =new Soldier("許二多");
                  TroopUnit wuban
          =new TroopUnit("五班");
                  wuban.add(xsd1);
                  
                  TroopUnit yipai
          =new TroopUnit("一排");
                  yipai.add(sanban);
                  yipai.add(wuban);
                  
                  TroopUnit qilian
          =new TroopUnit("七連");
                  qilian.add(yipai);
                  
                  Soldier wuliuyi
          =new Soldier("伍六一");
                  TroopUnit yiban
          =new TroopUnit("一班");
                  yiban.add(wuliuyi);
                  
                  TroopUnit yipai1
          =new TroopUnit("一排");
                  yipai1.add(yiban);
                  
                  TroopUnit yilian
          =new TroopUnit("一連");
                  yilian.add(yipai1);        
                  
                  TroopUnit yiying
          =new TroopUnit("一營");
                  yiying.add(qilian);
                  yiying.add(yilian);
                  
                  TroopUnit zhuangjiatuan
          =new TroopUnit("裝甲團");
                  zhuangjiatuan.add(yiying);
                  
                  TroopUnit zhuangjiashi
          =new TroopUnit("裝甲師");
                  zhuangjiashi.add(zhuangjiatuan);
                  
                  TroopUnit sanshibajun
          =new TroopUnit("甲種軍");
                  sanshibajun.add(zhuangjiashi);
                  
                  
          // 打印整體結構
                  sanshibajun.printInfo("");
                  
                  
          // 找出名字中包含"許"的士兵
                  List<Unit> foundUnits=new ArrayList<Unit>();
                  sanshibajun.findbyName(
          "", foundUnits);
                  
                  
          // 打印找出的單位
                  for(Unit unit:foundUnits){
                      unit.printInfo(
          "");
                  }

              }

              
          }

          執行結果:
           單位名=甲種軍 path=頂級
               單位名
          =裝甲師 path=甲種軍/
                   單位名
          =裝甲團 path=甲種軍/裝甲師/
                       單位名
          =一營 path=甲種軍/裝甲師/裝甲團/
                           單位名
          =七連 path=甲種軍/裝甲師/裝甲團/一營/
                               單位名
          =一排 path=甲種軍/裝甲師/裝甲團/一營/七連/
                                   單位名
          =三班 path=甲種軍/裝甲師/裝甲團/一營/七連/一排/
                                       士兵名
          =許三多 path=甲種軍/裝甲師/裝甲團/一營/七連/一排/三班/
                                   單位名
          =五班 path=甲種軍/裝甲師/裝甲團/一營/七連/一排/
                                       士兵名
          =許二多 path=甲種軍/裝甲師/裝甲團/一營/七連/一排/五班/
                           單位名
          =一連 path=甲種軍/裝甲師/裝甲團/一營/
                               單位名
          =一排 path=甲種軍/裝甲師/裝甲團/一營/一連/
                                   單位名
          =一班 path=甲種軍/裝甲師/裝甲團/一營/一連/一排/
                                       士兵名
          =伍六一 path=甲種軍/裝甲師/裝甲團/一營/一連/一排/一班/
           士兵名
          =許三多 path=甲種軍/裝甲師/裝甲團/一營/七連/一排/三班/
           士兵名
          =許二多 path=甲種軍/裝甲師/裝甲團/一營/七連/一排/五班/


          代碼下載:
          http://www.aygfsteel.com/Files/sitinspring/TroopTree20071204123647.rar

          posted on 2008-02-22 10:31 和風細雨 閱讀(335) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 瑞安市| 江川县| 广河县| 霞浦县| 乐清市| 城步| 清流县| 安达市| 沅陵县| 石林| 界首市| 分宜县| 灵武市| 鄂温| 阳城县| 兴安盟| 沈阳市| 古交市| 宁河县| 云龙县| 宁乡县| 铜陵市| 青铜峡市| 桃园市| 炎陵县| 喀喇沁旗| 定兴县| 北流市| 依兰县| 南木林县| 鹿邑县| 固镇县| 阿坝县| 林甸县| 遂宁市| 台南县| 敦化市| 揭西县| 和顺县| 张北县| 安义县|