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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张丽 中级黑马   /  2012-10-7 23:45  /  1417 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

该程序编译错误,说是类型转换异常,不知道在哪里修改代码。

package zhangli1;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
public class TreeMapDemo {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
         TreeMap<Person,String>map=new TreeMap<Person,String>(new ComparatorByNameDmeo());
         map.put(new Person("lisi1",29), "南京");
         map.put(new Person("lisi2",29), "上海");
         map.put(new Person("lisi3",29), "北京");
         map.put(new Person("lisi4",29), "天津");
        
         Iterator<Map.Entry<Person,String>>it=map.entrySet().iterator();
         while(it.hasNext()){
          Map.Entry<Person, String>me=it.next();
          Person key=me.getKey();
          String name=key.getName();
          int age=key.getAge();
          String value=me.getValue();
          System.out.println(name+",,,"+age+"...."+value);
         
         }
         
}
}

package zhangli1;
import java.util.Comparator;
import zhangli1.bean.Person;
public class ComparatorByNameDmeo implements Comparator{
public int compare(Object o1, Object o2) {
  // TODO Auto-generated method stub
     if(!(o1 instanceof Person))throw new ClassCastException("类型转换异常");
   
  Person p1=(Person)o1;
  Person p2=(Person)o2;
  int temp=p1.getName().compareTo(p2.getName());
  return (temp==0)?temp=p1.getAge()-p2.getAge():temp;
  

}
}


package zhangli1.bean;
public class Person {
        private String name;
        private int age;
  public String getName() {
   return name;
  }
  public void setName(String name) {
   this.name = name;
  }
  public int getAge() {
   return age;
  }
  public void setAge(int age) {
   this.age = age;
  }
  public Person(String name, int age) {
   super();
   this.name = name;
   this.age = age;
  }
  public String toString()
  {
   return name+":"+age;
  }
  /*public int hashCode(String name,int age){
   return this.name.hashCode()+this.age*30;
  }
  public boolean equals(){
   return this.name.equals(name)&&this.age==age;
  }*/
  public boolean equals(Object obj){
   if(this==obj){
    return true;
   }
   if(!(obj instanceof Person))throw new ClassCastException("类型转换错误");
   {
    Person p=(Person)obj;
    return this.name.equals(p.name)&&this.age==p.age;
   }
  }
  /*public int compareTo(Object o) {
   // TODO Auto-generated method stub
   if(!(o instanceof Person)) throw new ClassCastException("类型转换异常");
   Person p=(Person)o;
   int temp=this.getName().compareTo(p.getName());
   return (temp==0)?this.getAge()-p.getAge():temp;
  }*/
}

4 个回复

倒序浏览
编译错误应该好找吧?

package zhangli1;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import zhangli1.bean.Person;
public class TreeMapDemo {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
         TreeMap<Person,String>map=new TreeMap<Person,String>(new ComparatorByNameDmeo());
         map.put(new Person("lisi1",29), "南京");
         map.put(new Person("lisi2",29), "上海");
         map.put(new Person("lisi3",29), "北京");
         map.put(new Person("lisi4",29), "天津");
        
         Iterator<Map.Entry<Person,String>>it=map.entrySet().iterator();
         while(it.hasNext()){
          Map.Entry<Person, String>me=it.next();
          Person key=me.getKey();
          String name=key.getName();
          int age=key.getAge();
          String value=me.getValue();
          System.out.println(name+",,,"+age+"...."+value);
         
         }
         
}
}

package zhangli1;
import java.util.Comparator;
import zhangli1.bean.Person;
public class ComparatorByNameDmeo implements Comparator{
public int compare(Object o1, Object o2) {
  // TODO Auto-generated method stub
     if(!(o1 instanceof Person))throw new ClassCastException("类型转换异常");
   
  Person p1=(Person)o1;
  Person p2=(Person)o2;
  int temp=p1.getName().compareTo(p2.getName());
  return (temp==0)?temp=p1.getAge()-p2.getAge():temp;
  

}
}


package zhangli1.bean;
public class Person {
        private String name;
        private int age;
  public String getName() {
   return name;
  }
  public void setName(String name) {
   this.name = name;
  }
  public int getAge() {
   return age;
  }
  public void setAge(int age) {
   this.age = age;
  }
  public Person(String name, int age) {
   super();
   this.name = name;
   this.age = age;
  }
  public String toString()
  {
   return name+":"+age;
  }
  /*public int hashCode(String name,int age){
   return this.name.hashCode()+this.age*30;
  }
  public boolean equals(){
   return this.name.equals(name)&&this.age==age;
  }*/
  public boolean equals(Object obj){
   if(this==obj){
    return true;
   }
   if(!(obj instanceof Person))throw new ClassCastException("类型转换错误");
   {
    Person p=(Person)obj;
    return this.name.equals(p.name)&&this.age==p.age;
   }
  }
  /*public int compareTo(Object o) {
   // TODO Auto-generated method stub
   if(!(o instanceof Person)) throw new ClassCastException("类型转换异常");
   Person p=(Person)o;
   int temp=this.getName().compareTo(p.getName());
   return (temp==0)?this.getAge()-p.getAge():temp;
  }*/
}
回复 使用道具 举报
表示我把你的代码直接贴过来,除掉了包名,一切OK啊!运行的也没问题,是不是没导包?package com.wenfengkeji.heima;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class Demo15 {
        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                TreeMap<Person, String> map = new TreeMap<Person, String>(
                                new ComparatorByNameDmeo());
                map.put(new Person("lisi1", 29), "南京");
                map.put(new Person("lisi2", 29), "上海");
                map.put(new Person("lisi3", 29), "北京");
                map.put(new Person("lisi4", 29), "天津");

                Iterator<Map.Entry<Person, String>> it = map.entrySet().iterator();
                while (it.hasNext()) {
                        Map.Entry<Person, String> me = it.next();
                        Person key = me.getKey();
                        String name = key.getName();
                        int age = key.getAge();
                        String value = me.getValue();
                        System.out.println(name + ",,," + age + "...." + value);

                }

        }
}

class ComparatorByNameDmeo implements Comparator {
        public int compare(Object o1, Object o2) {
                // TODO Auto-generated method stub
                if (!(o1 instanceof Person))
                        throw new ClassCastException("类型转换异常");

                Person p1 = (Person) o1;
                Person p2 = (Person) o2;
                int temp = p1.getName().compareTo(p2.getName());
                return (temp == 0) ? temp = p1.getAge() - p2.getAge() : temp;

        }
}

class Person {
        private String name;
        private int age;

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

        public Person(String name, int age) {
                super();
                this.name = name;
                this.age = age;
        }

        public String toString() {
                return name + ":" + age;
        }

        /*
         * public int hashCode(String name,int age){ return
         * this.name.hashCode()+this.age*30; } public boolean equals(){ return
         * this.name.equals(name)&&this.age==age; }
         */
        public boolean equals(Object obj) {
                if (this == obj) {
                        return true;
                }
                if (!(obj instanceof Person))
                        throw new ClassCastException("类型转换错误");
                {
                        Person p = (Person) obj;
                        return this.name.equals(p.name) && this.age == p.age;
                }
        }
        /*
         * public int compareTo(Object o) { // TODO Auto-generated method stub
         * if(!(o instanceof Person)) throw new ClassCastException("类型转换异常"); Person
         * p=(Person)o; int temp=this.getName().compareTo(p.getName()); return
         * (temp==0)?this.getAge()-p.getAge():temp; }
         */
}
回复 使用道具 举报
有点懵。
回复 使用道具 举报
类型转换异常,怎么可能是 编译时错误,ClassCastException明明  RuntimeException,你这个应该是逻辑错误

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