| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 823 人关注过本帖
标题: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
快速回复:Exception in thread "main" java.lang.NullPointerException ...
数据加载中...
 
   



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

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