A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 耿渊博 中级黑马   /  2014-4-3 00:43  /  894 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 耿渊博 于 2014-4-3 10:11 编辑

毕老师视频上的程序,敲一遍报错,大概明白为什么不是特别清楚,因为看毕老师的可以运行
  1. package com.Iterator;

  2. import java.util.*;

  3. public class TreeSetTest {
  4.         
  5.         public static void main(String[] args) {
  6.                 //建立比较器
  7.                 TreeSet ts = new TreeSet(new StrLenComparator());//这句话报错说的是静态不能调用动态
  8.                 ts.add("abcd");
  9.                 ts.add("ab");
  10.                 ts.add("d");
  11.                 ts.add("hahah");
  12.                
  13.                 Iterator it = ts.iterator();
  14.                
  15.                 while(it.hasNext()){
  16.                         System.out.println(it.next());
  17.                 }
  18.                
  19.         }
  20.         
  21. //比较器按字符长度进行比较        
  22. class StrLenComparator implements Comparator{
  23.         
  24.         public int compare(Object o1,Object o2){
  25.                 String s1 = (String)o1;
  26.                 String s2 = (String)o2;
  27.                
  28.                 int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
  29.                
  30.                 return num;
  31.         }
  32. }
  33. }
复制代码

5 个回复

倒序浏览
大括号扩错了 你把StrLenComparator定义到TreeSetTest类中了
回复 使用道具 举报
  1. package com.Iterator;

  2. import java.util.*;

  3. public class TreeSetTest
  4. {
  5.         
  6.         public static void main(String[] args)
  7.                         {
  8.                 //建立比较器
  9.                 TreeSet ts = new TreeSet(new StrLenComparator());//这句话报错说的是静态不能调用动态
  10.                 ts.add("abcd");
  11.                 ts.add("ab");
  12.                 ts.add("d");
  13.                 ts.add("hahah");
  14.                
  15.                 Iterator it = ts.iterator();
  16.                
  17.                 while(it.hasNext())
  18.                                 {
  19.                         System.out.println(it.next());
  20.                 }
  21.                
  22.                         }
  23.         
  24. }       
  25. //比较器按字符长度进行比较        
  26.        
  27.              class StrLenComparator implements Comparator
  28.                         {
  29.                                
  30.                                 public int compare(Object o1,Object o2)
  31.                                         {
  32.                                                 String s1 = (String)o1;
  33.                                                 String s2 = (String)o2;
  34.                                                
  35.                                                 int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
  36.                                                
  37.                                                 return num;
  38.                                         }
  39.                         }
复制代码


回复 使用道具 举报
你的大括号位置有问题,如果你这么写那么
class StrLenComparator 就变成你的内部类,
1.首先你的内部类不是静态的对吧(不是static class)。
2.而main方法是静态的。
3.main 方法是个静态方法,而 静态 类不是个静态内部类,所以不能直接初始化。

对main方法而言,虽然写在类中,它是游离于任何类之外的(就跟C++一样,单独一个main方法),因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问
所以你把大括号改下就可以了:

public class TreeSetTest {
        
        public static void main(String[] args) {
                //建立比较器
                TreeSet ts = new TreeSet(new StrLenComparator());//这句话报错说的是静态不能调用动态
                ts.add("abcd");
                ts.add("ab");
                ts.add("d");
                ts.add("hahah");
               
                Iterator it = ts.iterator();
               
                while(it.hasNext()){
                        System.out.println(it.next());
                }
               
        }
}     
//比较器按字符长度进行比较        
class StrLenComparator implements Comparator{
        
        public int compare(Object o1,Object o2){
                String s1 = (String)o1;
                String s2 = (String)o2;
               
                int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
               
                return num;
        }
}
回复 使用道具 举报
你可以看下这偏文章,也是关于TreeSet排序问题的http://blog.csdn.net/itlsx/article/details/22150301
回复 使用道具 举报
冯海霞 发表于 2014-4-3 00:54
大括号扩错了 你把StrLenComparator定义到TreeSetTest类中了

明白了:L,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马