黑马程序员技术交流社区
标题:
TreeSet中的疑问
[打印本页]
作者:
耿渊博
时间:
2014-4-3 00:43
标题:
TreeSet中的疑问
本帖最后由 耿渊博 于 2014-4-3 10:11 编辑
毕老师视频上的程序,敲一遍报错,大概明白为什么不是特别清楚,因为看毕老师的可以运行
package com.Iterator;
import java.util.*;
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;
}
}
}
复制代码
作者:
打工人
时间:
2014-4-3 00:54
大括号扩错了 你把
StrLenComparator定义到
TreeSetTest类中了
作者:
Up↑Lee↗
时间:
2014-4-3 08:46
package com.Iterator;
import java.util.*;
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;
}
}
复制代码
作者:
Engle
时间:
2014-4-3 08:56
你的大括号位置有问题,如果你这么写那么
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;
}
}
作者:
Crystal静新
时间:
2014-4-3 08:57
你可以看下这偏文章,也是关于TreeSet排序问题的http://blog.csdn.net/itlsx/article/details/22150301
作者:
耿渊博
时间:
2014-4-3 09:37
冯海霞 发表于 2014-4-3 00:54
大括号扩错了 你把StrLenComparator定义到TreeSetTest类中了
明白了:L,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2