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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 茄子 高级黑马   /  2014-6-27 15:01  /  1408 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 茄子 于 2014-6-28 15:52 编辑

茄子又着急了!!!!下面是代码,红色字体出,循环不能结束,这是为什么呢????package fifteen_2;
/*
* 每一个学生都有属于自己的归属地,即其所在地,籍贯
* 学生:Student,地址:String
* 学生的属性:
*                         姓名,年龄
* 注意,姓名和年龄相同的,视作同一个学生。
* 要保证每一个学生的唯一性。
*
*
* 第一步:描述学生
* 第二部:定义map容器,将学生用作键,地址作为值,存入。
* 第三部,获取map集合中的元素。
* */
import java.util.*;
class Student implements Comparable<Student>
{
        private String name;
        private int age;
        Student(String name,int age)     //构造函数进行初始化。
        {
                this.name=name;
                this.age=age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
        public int compareTo(Student s)      //为了让学生对象具备比较性,实现了conparable()接口
                                                    //这里需要复写compareTo()方法,
        {
                int num=new Integer(this.age).compareTo(new Integer(s.age));   //将年龄进行封装。
                if(num==0)
                        return this.name.compareTo(s.name);            //建立次要的比较条件
                return num;
        }
        public int hashCode()
        {
                return this.name.hashCode()+age*39;     //保证hashCode()返回值的唯一性。        
        }
        public boolean equals(Object obj)
        {
                if(!(obj instanceof Student))
                        throw new RuntimeException("数据类型不匹配");  //这里可以写成RuntimeException()异常的子类,
                                                                     //classCastException(),类型转换异常。
                Student stu=(Student)obj;
                return this.name.equals(stu.name)&&this.age==stu.age;
        }
        public String toString()   //这里覆盖了字符串的toString()方法,,输出时,学生对象,将会自己主动调用该方法。
        {
                return name+":"+age;
        }
}
public class MapTest {
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

        public static void TT(String[] args) {
                HashMap<Student,String> mp=new HashMap<Student,String>();
                mp.put(new Student("zhaoyujie01",21),"beijing");
                mp.put(new Student("zhaoyujie02",22),"zhangye");
                mp.put(new Student("zhaoyujie02",22),"gansu");  //集合中只有四个元素,而且,甘肃会覆盖zhangye
                mp.put(new Student("zhaoyujie03",23),"jiuquan");
                mp.put(new Student("zhaoyujie04",24),"newyork");
                //方法一:利用keySet方法,进行存取。
                Set<Student> set=mp.keySet();
                Iterator<Student> it=set.iterator();
                while(it.hasNext())
                {
                        Student stu=it.next();
                        String str=mp.get(stu);
                //        sop(stu.getName()+"^^^^^^^^^^^^"+stu.getAge()+"^^^^^^^^^^"+str);
                        sop(stu+str);  //在这里,学生对象stu会自己底层调用toString()方法,
                        
                }
        
               
               
                //方法二,利用entrySet()方法进行获取。
                Set<Map.Entry<Student, String>> entrySet=mp.entrySet();
                Iterator<Map.Entry<Student, String>> itt=entrySet.iterator();
                while(itt.hasNext());
                {
                        Map.Entry<Student,String> me=itt.next();
                        Student stu=me.getKey();
                        String add=me.getValue();
                        sop(stu.getName()+"………………"+stu.getAge()+"…………"+add);
                        
                }
        

        }

}





跪求大神解释啊!!!


评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 哈哈 茄子兄加油!~

查看全部评分

10 个回复

倒序浏览
茄子楼主。。。。额。。。。我说两句?
1.你的main方法呢? public static void TT(String[] args) 这个TT是神马???
2.方法二的while后面,有个分号,你看见木有?while(itt.hasNext());

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
使用map得包含map类所在的头文件:#include <map> //注意,STL头文件没有扩展名.h  map对象是模板类,需要关键字和存储对象两个模板参数,基本的定义模式如下:   std:map<int, string> personnel;   这样就定义了一个以int为键,值为string的map对象personnel。     map中定义了以下三个类型:  map<K, V>::key_type : 表示map容器中,索引的类型; map<K, V>::mapped_type : 表示map容器中,键所关联的值的类型; map<K, V>::value_type : 表示一个pair类型,它的first元素具有const map<K, V>::key_type类型,而second元素则有map<K, V>::mapped_type类型 对迭代器进行解引用时,将获得一个引用,指向容器中一个value_type类型的值,对于map容器,其value_type是pair类型。     为了使用方便,可以对模板类进行一下类型定义,  typedef map<int, CString> UDT_MAP_INT_CSTRING;  UDT_MAP_INT_CSTRING enumMap;
回复 使用道具 举报
while(itt.hasNext()){
                Map.Entry<Student,String> me=itt.next();
            Student stu=me.getKey();
            String add=me.getValue();
            sop(stu+"****"+add+"***"+add);
        }
不是getName(),getAge(),把这一段改成上面的就行了
回复 使用道具 举报
          for(Map.Entry<Student,String> ss:entrySet)
//                {
//                        Student stu=ss.getKey();
//                        String s=ss.getValue();
//                        System.out.println(stu+s);
//                }
我试了试这样可以,还真不知道你那样用迭代为什么不行
回复 使用道具 举报

  1. for(Iterator<Map.Entry<Student, String>> it = mp.entrySet().iterator() ; it.hasNext() ;){
  2.                         Map.Entry<Student, String> me = it.next();
  3.                         Student key = me.getKey();
  4.                         String value = me.getValue();
  5.                         System.out.println(key + ".." + value);
  6.                 }
复制代码

楼上的眼神很犀利,抓住了关键问题。

楼主大神,不应该犯这个错误。
回复 使用道具 举报
茄子 高级黑马 2014-6-28 10:24:54
7#
tacyjay在路上 发表于 2014-6-27 21:22
茄子楼主。。。。额。。。。我说两句?
1.你的main方法呢? public static void TT(String[] args) 这个TT ...

谢谢大婶!!!

点评

哈哈。。。好好加油。。。小伙子,有前途。。。学习很认真,加油!!  发表于 2014-6-28 22:11
回复 使用道具 举报
帮帮 中级黑马 2014-6-28 11:08:29
8#
经验问题,多练习一些找错题会好一些
回复 使用道具 举报
楼主,你太霸气了!
回复 使用道具 举报
本帖最后由 尹兆国 于 2014-6-28 20:09 编辑

  public static void TT(String[] args),这里的TT,应该改为main。main是程序的主入口。java虚拟机只认main为入口。   while(itt.hasNext());,多加了一个分号。你加了分号,后面的大括号就跟while脱离了关系,不再是while循环体。大括号在这里,仅仅是一个代码块
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马