到底是我的问题还是jvm的问题!

hawaii_wx 2005-07-14 10:40:50
最近写了一个程序关于在map系列的集合中通过值来查找键
但是结果很是让我大失所望!
有类Grade,Stu

public class Grade
{

int chinese;
int math;
public Grade(int c,int m)
{
chinese=c;
math=m;
}

/* (非 Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
// TODO 自动生成方法存根
return "语文>>>:"+chinese+" 数学>>>"+math;
}
public boolean equals(Object arg0) {
// TODO 自动生成方法存根
if(((Grade)arg0).math==math && ((Grade)arg0).chinese==chinese)
{
return true;
}
else
{
return false;
}
}
}

Stu类和Grade类一样,保存学生的姓名和编号,重写了toString方法,没有重写equals方法

有HashMap类MyHashMap

public class MyHashMap
{

public static void main(String[] args) throws Exception
{
HashMap hm=new HashMap();
Stu s1=new Stu(1,"张三");
Stu s2=new Stu(3,"李四");
Stu s3=new Stu(2,"王五");
Grade g1=new Grade(70,80);
Grade g2=new Grade(70,90);
Grade g3=new Grade(70,80);
hm.put(s1,g1);
hm.put(s2,g2);
hm.put(s3,g3);
// if(hm.containsKey(s3))
// {
// System.out.println(s3+"的成绩为"+hm.get(s3));
// }
// else
// {
// System.out.println("没有这个学生");
// }
//System.out.println(hm.get(s2));


System.out.println("--------------------");
Object obj[]=Select.mapValue(hm,g3);//用下面的那个方法总是不能正确显示结果,郁闷
for(int i=0;i<obj.length;i++)
{
if(obj[i]!=null)
{
System.out.println((Stu)(obj[i]));
}
}

System.out.println("--------------------");
}
}
希望大家能帮我看看,到底是什么地方错了!谢谢了
下面是查询的类,有一个方法

public class Select
{
public static Object[] mapValue(Map m,Object value)//通过值来查找键,可能返回多个值,
//因为,map中键不可以一样,但是值可以重复
{
if(m.containsValue(value))
{
Collection sKey=m.keySet();//用来保存键的集合

Object o2[]=new Object[m.size()] ;
//保存结果的集合,注意这里要对数组进行初始化,否则会出现空引用
Iterator it=sKey.iterator();//用一个迭代器接收所有的键
int i=0;
while(it.hasNext())
{
if(value.equals(m.get(it.next())))
//在遍历这个迭代器时判断当参数传进来的值和当前遍历到的键对应的值如果相等
//那么当前的键为结果之一
{
Object o=it.next();

o2[i]=o;//把当前的遍历到的键保存到结果对象数组中
i=i+1;
}

}
/****************************************/

return o2;
}
else
{
return null;
}
}
}
...全文
62 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawaii_wx 2005-07-14
  • 打赏
  • 举报
回复
to:mofeir(损人专家) ( ) 信誉:99
谢谢你的告知,我又范了一个很低级的错误!让你见笑了
mofeir 2005-07-14
  • 打赏
  • 举报
回复
public class Select
{
public static Object[] mapValue(Map m,Object value)//通过值来查找键,可能返回多个值,
//因为,map中键不可以一样,但是值可以重复
{
if(m.containsValue(value))
{
Collection sKey=m.keySet();//用来保存键的集合

Object o2[]=new Object[m.size()] ;
//保存结果的集合,注意这里要对数组进行初始化,否则会出现空引用
Iterator it=sKey.iterator();//用一个迭代器接收所有的键
int i=0;
while(it.hasNext())
{
Object key = it.next();
if(value.equals(m.get(key)))
//在遍历这个迭代器时判断当参数传进来的值和当前遍历到的键对应的值如果相等
//那么当前的键为结果之一
{
Object o=key;

o2[i]=o;//把当前的遍历到的键保存到结果对象数组中
i=i+1;
}

}
/****************************************/

return o2;
}
else
{
return null;
}
}
}
mofeir 2005-07-14
  • 打赏
  • 举报
回复
这么长的程序,最起码100分了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧