随笔-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执行的是组织导入( 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函数里最后一句e.nextElement();前加Sy然后按alt+/,可以自动补全为System然后打 .   最终打出System.out.println(e.nextElement());

运行一下,发现结果只是把数据原样输出。这个类是要实现排序的。所以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 静儿 阅读(2615) 评论(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+/ 就可以了  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: