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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡刚涛 中级黑马   /  2012-7-14 21:00  /  1823 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



今天在编写程序是出现了下面的问题:

class student implements Comparable
{
private int age;
private int scor;
private String name;
  public student(String name,int age,int scor)
  {
   this.age=age;
   this.scor=scor;
   this.name=name;
   
  }
  public String getName()
  {
   return name;
  }
  public int getAge()
  {
   return age;
  }
  public int getScor()
  {
   return scor;
  }
  public int compareTo(Object obj)
  {
   if(!(obj instanceof student))
      throw new RuntimeException();
    student s=(student)obj;
    if (this.scor>s.scor)
       return 1;
     if (this.scor==s.scor)
         return this.name.compareTo(s.name);
     return -1;
  }
}
class TreeSetDemo
{
   public static void main(String [] args)
   {
   TreeSet t=new TreeSet(new Mycompare());//两种方式
     t.add(new student("a",20,70));
     t.add(new student("b",20,78));
     t.add(new student("c",20,80));
      t.add(new student("d",20,85));
     t.add(new student("e",20,90));
      
      Iterator it=t.iterator();
       while(it.hasNext())
       {
         student st=(student)it.next();
        System.out.println(st.getName()+"...."+st.getAge()+"..."+st.getScor());
       }
   }
}
class Mycompare implements Comparator
{
public int compare(Object o1,Object o2)
{
    student s1=(student)o1;
    student s2=(student)o2;
    int num=s1.getScor().compareTo(s2.getScor());
     if (num==0)
         return s1.getName().compareTo(s2.getName());
         return num;
}

}

在红色的int num=s1.getScor().compareTo(s2.getScor());这句中说是编译错误说是无法取消引用int。求解!!!

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 黑马振鹏 于 2012-7-14 21:26 编辑

     int num=new Integer(s1.getScor()).compareTo(new Integer (s2.getScor()));
    int compareTo(T o)比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
回复 使用道具 举报
本帖最后由 于星星 于 2012-7-14 21:50 编辑

s1.getScor().compareTo(s2.getScor());,compareTo这个方法是student对象的方法,你现在是s1.getScor()返回值来调用的
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
class student implements Comparable
{
private int age;
private int scor;
private String name;
   public student(String name,int age,int scor)
   {
    this.age=age;
    this.scor=scor;
    this.name=name;
   
   }
   public String getName()
   {
    return name;
   }
   public int getAge()
   {
    return age;
   }
   public int getScor()
   {
    return scor;
   }
   public int compareTo(Object obj)
   {
    if(!(obj instanceof student))
       throw new RuntimeException();
     student s=(student)obj;
     if (this.scor>s.scor)
        return 1;
      if (this.scor==s.scor)
          return this.name.compareTo(s.name);
      return -1;
   }
}
public class TreeSetDemo
{
    public static void main(String [] args)
    {
      TreeSet t=new TreeSet(new Mycompare());//两种方式
      t.add(new student("a",20,70));
      t.add(new student("b",20,78));
      t.add(new student("c",20,80));
      t.add(new student("d",20,85));
      t.add(new student("e",20,90));
      
    Object obj[] =  t.toArray();
     for(int i=0;i<obj.length;i++){
      student s1 = (student)obj;
      System.out.println(s1.getScor()+"排序之前");
     }
     Arrays.sort(obj,new Mycompare());
     for(int i=0;i<obj.length;i++){
      student s1 = (student)obj;
      System.out.println(s1.getScor()+"排序之后");
     }

    }
}
class Mycompare implements Comparator
{
public int compare(Object o1,Object o2)
{
     student s1=(student)o1;
     student s2=(student)o2;
    if(s1.getScor()>s2.getScor()){
      return -1;
     }
     if(s1.getScor()>s2.getScor()){
      return 1;
     }
     return 0;

}
}
这里需要用到Arrays工具类的排序方法,然后将实现Comparator接口的对象传进去,在compare方法里面传入两个参数,如果第一个参数大于第二个参数就返回负数,等于返回0,小于返回正整数。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 胡刚涛 于 2012-8-10 22:06 编辑

谢谢!:handshake已解决!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马