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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 咕咕猫 中级黑马   /  2013-9-14 10:13  /  1544 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 咕咕猫 于 2013-9-14 15:34 编辑

练习:按照字符串长度排序
import java.util.*;
class TreeSetTest
{
        public static void main(String[]args)
        {
                TreeSet ts = new TreeSet(new MyCompare());//建立TreeSet集合
                ts.add("abcd");
                ts.add("cc");
                ts.add("cb");
                ts.add("cba");
                ts.add("z");
                ts.add("haha");
                Iterator it = ts.iterator();
                while (it.hasNext())
                {
                        System.out.println(it.next());
                }
        }
}
class MyCompare implements Comparator//建立比较器
{
        public int compare(Object o1,Object o2)
        {
                String s1 = (String)o1;//强转类型为字符串型
                String s2 = (String)o2;
                int num = s1.length().compareTo(s2.length());//比较字符串长度
                if(num==0)//当字符串长度相同时比较字符串自然顺序
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}
{:soso_e132:}感觉写的应该没什么问题吧怎么运行不出来呢,求指教啊

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

4 个回复

倒序浏览
你是用的记事本工具吧
第一个问题:你在写的时候注意单词
while (it.hasNest())//你的单词写错了  是hasNext
                {
                        System.out.println(it.next());
                }
第二个问题  你在比较字符串长度的时候  
int num = s1.length().compareTo(s2.length());//比较字符串长度    //这个比较是有点问题的
                if(num==0)//当字符串长度相同时比较字符串自然顺序
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
既然只比较长度  可以这样写啊
int num = s1.length();
  int num1 = s2.length();// 比较字符串长度
  if (num == num1)// 当字符串长度相同时比较字符串自然顺序
  {
   return s1.compareTo(s2);
  }
  return num;
}


评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
package com.itheima;

import java.util.*;

class TreeSetTest {
        public static void main(String[] args) {
                TreeSet ts = new TreeSet(new MyCompare());// 建立TreeSet集合
                ts.add("abcd");
                ts.add("cc");
                ts.add("cb");
                ts.add("cba");
                ts.add("z");
                ts.add("haha");
                Iterator it = ts.iterator();
                while (it.hasNext()) {
                        System.out.println(it.next());
                }
        }
}

class MyCompare implements Comparator// 建立比较器
{
        public int compare(Object o1, Object o2) {
                String s1 = (String) o1;// 强转类型为字符串型
                String s2 = (String) o2;
                int num = s1.length()-s2.length();// 比较字符串长度
                if (num == 0)// 当字符串长度相同时比较字符串自然顺序
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}
int不能用比较器,直接减就可以了

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
本帖最后由 咕咕猫 于 2013-9-14 12:52 编辑
雪龙 发表于 2013-9-14 10:33
你是用的记事本工具吧
第一个问题:你在写的时候注意单词
while (it.hasNest())//你的单词写错了  是hasNe ...

呃呃,单词打错了。这一步是为了比较字符串谁长谁短的,然后会返回一个值,有一种特殊的情况就是当两个字符串长度相等时,这样会默认这两个字符串是一样的只会存其中的一个,为了解决这个问题所以在下面又写了if语句来判断当字符串长度一样时,字符串的内容是否一样。你这样写的话应该不行吧
回复 使用道具 举报
package enumTest;


//练习:按照字符串长度排序
import java.util.*;
class TreeSetTest
{
        public static void main(String[]args)
        {
                TreeSet ts = new TreeSet(new MyCompare());//建立TreeSet集合
                ts.add("abcd");
                ts.add("cc");
                ts.add("cb");
                ts.add("cba");
                ts.add("z");
                ts.add("haha");
                Iterator it = ts.iterator();
                while (it.hasNext())  //(1)
                {
                        System.out.println(it.next());
                }
        }
}
class MyCompare implements Comparator//建立比较器
{
        public int compare(Object o1,Object o2)
        {
                String s1 = (String)o1;//强转类型为字符串型
                String s2 = (String)o2;
                int num = s1.length()-s2.length();//比较字符串长度  //(2)
                if(num==0)//当字符串长度相同时比较字符串自然顺序
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}
//(1)it.hasNest() -->it.hasNext()这不是用eclipse写的吧,要不然不会出这么简单的问题
//(2)比较字符串长度的时候不能用compare比较,直接用==就行,你这个可以改成相减

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马