标题:Exception in thread "main" java.lang.NullPointerException
只看楼主
jimmy2006
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-12-29
 问题点数:0 回复次数:4 
Exception in thread "main" java.lang.NullPointerException

import java.util.*;

class MyKey
{
private String name;
private int age;
public MyKey(String name,int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return new String(name + "," + age);
}
public boolean equals(Object obj)
{
if(name.equals(obj) && age == obj)
{
return true;
}
else
{
return false;
}
}
public int hashCode()
{
return name.hashCode() + age;
}
}

class Thashtable
{
public static void main(String[] args)
{
Hashtable ht = new Hashtable();
ht.put(new MyKey("jimmy",20),new Integer(1));
ht.put(new MyKey("jimm",21),new Integer(2));
ht.put(new MyKey("jim",22),new Integer(3));
Enumeration e = ht.keys();
while(e.hasMoreElements())
{
MyKey key = (MyKey)e.nextElement();
System.out.println(key.toString() + "=");
System.out.println( ht.get(key).toString());
}
}
}

执行Exception in thread "main" java.lang.NullPointerException
at test.Thashtable.main(Thashtable.java:19)
那为大侠帮忙修改一下

搜索更多相关主题的帖子: Exception thread java lang 
2006-12-29 16:36
xetele68407
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-12-23
得分:0 

import java.util.*;

class MyKey
{
private String name;
private int age;
public MyKey(String name,int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return new String(name + "," + age);
}
public boolean equals(Object obj)
{
if(name.equals(obj) && age == obj)
{
return true;
}
else
{
return false;
}
}
public int hashCode()
{
return name.hashCode() + age;
}
}


class Thashtable
{
public static void main(String[] args)
{
Hashtable ht = new Hashtable();
ht.put(new MyKey("jimmy",20),new Integer(1));
ht.put(new MyKey("jimm",21),new Integer(2));
ht.put(new MyKey("jim",22),new Integer(3));
Enumeration e = ht.keys();
while(e.hasMoreElements())
{
MyKey key = (MyKey)e.nextElement();
System.out.println(key.toString() + "=");
System.out.println(ht.toString());//此处写错 ,改后 }
}
}


[此贴子已经被作者于2006-12-29 17:33:46编辑过]


------------->别<-------------- ------------->B<-------------- ------------->B<--------------
2006-12-29 16:46
jimmy2006
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-12-29
得分:0 
这样修改是不对的!

这样修改虽然不抱NullPointerException,但是结果不对
jimmy,20={jimmy,20=1, jim,22=3, jimm,21=2}
jim,22={jimmy,20=1, jim,22=3, jimm,21=2}
jimm,21={jimmy,20=1, jim,22=3, jimm,21=2}
结果应该是
jimmy,20=1
jim,22=3
jimm,21=2

2006-12-29 17:28
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

你错在哪里,错在你的equals方法没有定义好,按你那个定义,没有东西能匹配

你用我写的替换你写的就可以了 ,其它的不用改
[CODE]public boolean equals(Object obj)
{
if(obj instanceof MyKey){
MyKey m=(MyKey)obj;
if(m.age==this.age&&m.name.equals(this.name)){
return true;
}
else
return false;
}else
return false;
}[/CODE]


可惜不是你,陪我到最后
2006-12-29 19:14
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

当你用ht.get()的时候,你传入对象会去匹配hashtable里面的对象,它会调用equals方法,看里面有没有对象和它相等,

你以前定义的话,传入的肯定不会相等

这一点以后你要注意,如果你不知道如果去重写equals方法,干脆就不要写,用Object的方法


可惜不是你,陪我到最后
2006-12-29 19:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-113001-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.086595 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved