隨筆-60  評論-117  文章-0  trackbacks-0
             我用的eclipse版本是3.1.1的英文版。假設源程序是這樣:

          package c08;

          publicclass StrSortVector {

                 private Vector v = new Vector();

                 Compare compare = new Compare();

                 class Compare {

                        publicboolean lessThan(Object l, Object r) {

                               return ((String) l).toLowerCase().compareTo(

                                             ((String) r).toLowerCase()) < 0;

                        }

                        publicboolean lessThanOrEqual(Object l, Object r) {

                               return ((String) l).toLowerCase().compareTo(

                                             ((String) r).toLowerCase()) <= 0;

                        }

                 }

                 privatebooleansorted = false;

                 publicvoid addElement(String s) {

                        v.addElement(s);

                        sorted = false;

                 }

                 public String elementAt(int index) {

                        if (!sorted) {

                               sort();

                               sorted = true;

                        }

                        return (String) v.elementAt(index);

                 }

                 public Enumeration elements() {

                        if (!sorted) {

                               sort();

                               sorted = true;

                        }

                        returnv.elements();

                 }

                 publicvoid sort() {

                        quickSort(0, v.size() - 1);

                        System.out.println("size=" + (v.size() - 1));

                 }

                 privatevoid quickSort(int left, int right) {

                        if (right > left) {

                               Object o1 = elementAt(right);

                               int i = left - 1;

                               System.out.println("i=" + i);

                               int j = right;

                               System.out.println("j=" + j);

                               while (true) {

                                      while (compare.lessThan(elementAt(++i), o1))

                                             ;

                                      while (j > 0)

                                             if (compare.lessThanOrEqual(elementAt(--j), o1))

                                                    break; // out of while

                                      if (i >= j)

                                             break;

                                      swap(i, j);

                               }

                               swap(i, right);

                               quickSort(left, i - 1);

                               quickSort(i + 1, right);

                        }

                 }

                 privatevoid swap(int loc1, int loc2) {

                        Object tmp = elementAt(loc1);

                        v.setElementAt(elementAt(loc2), loc1);

                        v.setElementAt(tmp, loc2);

                 }

                 // Test it:

                 publicstaticvoid main(String[] args) {

                        StrSortVector sv = new StrSortVector();

                        sv.addElement("d");

                        sv.addElement("A");

                        sv.addElement("C");

                        sv.addElement("c");

                        sv.addElement("b");

                        sv.addElement("B");

                        sv.addElement("D");

                        sv.addElement("a");

                        Enumeration e = sv.elements();

                        while (e.hasMoreElements())

                               e.nextElement();

                 }

          }// /:~

          為了容易看,所以先要ctrl+shift+f格式化一下。有紅叉號,懷疑有什么沒導進來,于是ctrl+shift+oimport 一下。值得一提的是ctrl+shift+o執(zhí)行的是組織導入( organize import),就是說缺少導入,可以自動添加;有無用導入,可以自動刪除。

          好了,編譯通過了。

          代碼中的方法有點亂是吧。試著來將代碼整理一下,鼠標放在代碼上,

          首先我想進行代碼重構。

          將下面這段代碼選中:

          class Compare {

                        publicboolean lessThan(Object l, Object r) {

                               return ((String) l).toLowerCase().compareTo(

                                             ((String) r).toLowerCase()) < 0;

                        }

                        publicboolean lessThanOrEqual(Object l, Object r) {

                               return ((String) l).toLowerCase().compareTo(

                                             ((String) r).toLowerCase()) <= 0;

                        }

                }

             

          右鍵點擊refactor - -Convert Member Type To Top Level。在彈出的對話框里輸入抽出的類的名稱CompareOK即可。

          我還想將類Compare中的方法中提取出接口,于是:將要提取的方法選中,右鍵單擊extract Interface。輸入接口名ICompare,在要提取的方法名上打勾,OK.

          鼠標放在代碼上,右鍵點擊run as Java Application .運行報錯。錯誤信息如下:Exception in thread "main" java.lang.StackOverflowError

                 at c08.StrSortVector.sort(StrSortVector.java:35)

                 at c08.StrSortVector.quickSort(StrSortVector.java:41)

             at c08.StrSortVector.elementAt(StrSortVector.java:20)

          點擊控制臺上的(StrSortVector.java:35)鏈接,找到出錯的地方。

                 public Enumeration elements() {

                        if (!sorted) {

                               sort();

                               sorted = true;

                        }

                        returnv.elements();

                }

          這個方法里的quickSort(0, v.size() - 1);出錯了。Ctrl+/將其注釋掉。運行通過了,可是沒有結果。將程序改一下,將結果打印:main函數(shù)里最后一句e.nextElement();前加Sy然后按alt+/,可以自動補全為System然后打 .   最終打出System.out.println(e.nextElement());

          運行一下,發(fā)現(xiàn)結果只是把數(shù)據(jù)原樣輸出。這個類是要實現(xiàn)排序的。所以alt+返回歷史紀錄。把注釋掉內容再按一次alt+/打開。

          既然quickSort(0, v.size() - 1);這個方法有錯誤,就選中quickSort按住alt鍵轉到此方法,在錯誤提示里說(StrSortVector.java:41)有錯,這正好是在quickSort方法中,看來是同一個錯誤,此行Object o1 = elementAt(right);又調用一個方法。選中elementAt按住ctrl轉到這個方法中,StrSortVector.java:20

          正好在此方法中,看來提示根本都是一個錯誤。20sort();有錯,將其注釋掉。運行通過,結果按字母排序完成。

          其實一般喜歡用debug來查找錯誤。但當把debug關了,就會找不到代碼文件原來的位置。此時可以在代碼上右健點擊Show In - -navigator。就可以定位此文件了。

          posted on 2008-03-01 11:42 靜兒 閱讀(2658) 評論(4)  編輯  收藏 所屬分類: 技術

          評論:
          # re: eclipse使用實例 2008-03-02 14:50 | xifu
          值得學習的文章,強悍的樓主  回復  更多評論
            
          # re: eclipse使用實例 2008-03-03 12:38 | 靜兒
          @xifu
          eclipse對java程序來說一個功能非常強大的工具。想用一個簡單的程序來說明它那怕是一小部分常用功能已是非常牽強。文章水平非常有限,請多提寶貴意見。
            回復  更多評論
            
          # re: eclipse使用實例[未登錄] 2008-03-05 12:39 | Jarod
          的確強悍。。。因為用文字來講解IDE功能比較難,一般人會通過圖+文或視頻  回復  更多評論
            
          # re: eclipse使用實例 2008-03-12 15:24 | zhangjianying
          如果是要打出 System.out.println()
          有個便捷的方式就是 打 sysout 然后 Alt+/ 就可以了  回復  更多評論
            
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(12)

          隨筆檔案

          味方

          搜索

          •  

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 吴忠市| 新和县| 永泰县| 大渡口区| 定边县| 湖南省| 五河县| 兴仁县| 长泰县| 华蓥市| 辽宁省| 米脂县| 临猗县| 金门县| 苏尼特右旗| 三门峡市| 屏山县| 鹿邑县| 梅州市| 平度市| 崇仁县| 偏关县| 仲巴县| 婺源县| 商都县| 柞水县| 饶平县| 东光县| 腾冲县| 东丰县| 沿河| 宜兰市| 常宁市| 泽州县| 简阳市| 甘泉县| 长阳| 灵璧县| 定日县| 阿合奇县| 盱眙县|