为什么会出现这个异常,如何解决?

hebopolo 2008-03-10 01:23:25
你好,我写了一个实现添加、查找、保存等简单功能的电话簿类,在附件中你可以看到
该电话簿包括人的信息的类、电话号码的类、输入电话条目信息的类、电话本的类、读取从键盘输入信息的类、从键盘输入信息出现异常的类以及运行电话本的类
在运行电话本即TryPhoneBook.java时,选择添加电话条目时,会出现以下异常:
Exception in thread "main" java.lang.NullPointerException
at Person.hashCode(Person.java:26)
at java.util.HashMap.put(HashMap.java:372)
at PhoneBook.addEntry(PhoneBook.java:14)
at TryPhoneBook.main(TryPhoneBook.java:23)

不知道是因为映射的散列码的问题还是有其他原因?如何解决?希望能得到您的帮助,非常感谢!
...全文
187 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hebopolo 2008-03-20
  • 打赏
  • 举报
回复
运行成功了,没想到竟然是Person类里firsName少打了一个字母,折腾了好久,就是没检查出来
谢谢hmsuccess
hmsuccess 2008-03-18
  • 打赏
  • 举报
回复
就是这个
public Person(String firsName, String surname) {
this.firstName = firsName;
this.surname = surname;
}
EdifierX 2008-03-18
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hebopolo 的回复:]
你改的地方能标注出来么
[/Quote]
您是大爷么.
hebopolo 2008-03-17
  • 打赏
  • 举报
回复
你改的地方能标注出来么
hmsuccess 2008-03-11
  • 打赏
  • 举报
回复
对于错误,我已经帮你改过了,我觉得整体来说不错,但是写进去的是乱码,应该跟writeObject有关系
hebopolo 2008-03-11
  • 打赏
  • 举报
回复
谢谢大家的回复
不过看来看了附件里代码的人不多啊
jy02411368 2008-03-11
  • 打赏
  • 举报
回复
空指针异常
好好在看看应该是需要加异常检测 你要是在开发工具里用的设个断点检查一下
hmsuccess 2008-03-10
  • 打赏
  • 举报
回复

import java.io.Serializable;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Person implements Comparable<Person>, Serializable {
//构造函数
public Person(String firsName, String surname) {
this.firstName = firsName;
this.surname = surname;
}

public String toString() {
return firstName + " " + surname;
}
public int compareTo(Person person) {
int result =surname.compareTo(person.surname);
return result==0?firstName.compareTo(((Person)person).firstName):result;
}
//比较方法
public boolean equals(Object person) {
return compareTo((Person)person) == 0;
}
//生成散列码
public int hashCode() {
return 7*(firstName.hashCode())+13*(surname.hashCode());
}
//从键盘读取人的信息
public static Person readPerson() {
String firstName =null;
String surname = null;
try {
System.out.print("输入你的名字:");
firstName = keyboard.readLine().trim();
System.out.print("输入你的姓氏:");
surname = keyboard.readLine().trim();
} catch(IOException e) {
System.err.println("姓名输入错误!");
e.printStackTrace();
System.exit(1);
}
return new Person(firstName,surname);
}

private static BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
private String firstName;
private String surname;
}


其实是你不小心引起的,我帮你找改了个地方,你再试试
changjiangzhibin 2008-03-10
  • 打赏
  • 举报
回复
打几行测试代码就能搞定
psyl 2008-03-10
  • 打赏
  • 举报
回复
加林仙人 哈哈,喵!~!!!!
ashutc 2008-03-10
  • 打赏
  • 举报
回复
空指针 没看代码
cangyue87 2008-03-10
  • 打赏
  • 举报
回复
6楼说的也有对....lz加油吧喵...
霜之哀伤 2008-03-10
  • 打赏
  • 举报
回复
有钱人啊,这都放了100分
guoxiaopeng1982 2008-03-10
  • 打赏
  • 举报
回复
空值…………常见错误…………在Person.java类26行,你仔细分析下这里为什么会是空值就完了
logi22 2008-03-10
  • 打赏
  • 举报
回复
Person.java的这个方法出了空指针
//生成散列码
public int hashCode() {
return 7*firstName.hashCode()+13*surname.hashCode();
}
应该是这个方法出错了
//从键盘读取人的信息
public static Person readPerson() {
String firstName =null;
String surname = null;
try {
System.out.print("输入你的名字:");
firstName = keyboard.readLine().trim();
System.out.print("输入你的姓氏:");
surname = keyboard.readLine().trim();
} catch(IOException e) {
System.err.println("姓名输入错误!");
e.printStackTrace();
System.exit(1);
}
return new Person(firstName,surname);
}
kekeemx 2008-03-10
  • 打赏
  • 举报
回复
空指针问题啊....DEBUG一步步走,应该很容易就定位问题了吧.
nihuajie05 2008-03-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cangyue87 的回复:]
附件?...
太懒了吧......

空指针,这是最好找问题的异常了.
Person.hashCode方法抛出的,在Person类第26行...

喵~~~`
[/Quote]
他一共有6个类+1个Main
你说他能Ctrl+C 然后Ctrl+V上来不??小孩子也不容易啊
nihuajie05 2008-03-10
  • 打赏
  • 举报
回复
哈哈,帮你看了下,不过我这可不是这个问题,你没有把读入文件放在附件内,所以文件读入首先出了问题
希望更新附件后通知,再看你的代码问题
dracularking 2008-03-10
  • 打赏
  • 举报
回复
看来有重写hashCode方法
neilwong82 2008-03-10
  • 打赏
  • 举报
回复
就是,附件这种方式可不怎么地道
加载更多回复(2)
内容简介: Redis的的是完全开源免费的,遵守BSD协议,是一个高性能的键值数据库。是当前最热门的的的NoSql数据库之一,也被人们称为数据结构服务器。本课程从Redis基本数据类型开始,了解不同数据类型的用法和底层实现 。进一步学习Redis的一些高级特性与工作原理。了解Redis在分布式环境中的工作方式,和实际项目的使用及问题解决。 为什么学Redis? 原因很简单,快!这个问题在大并发,高负载的网站中必须考虑.redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势。项目中使用Redis,主要是从两个角度去考虑:性能状语从句:并发。当然,Redis的的的还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件代替,并不是非要使用Redis的的的。因此,这个问题主要从性能和并发两个角度去答。性能:我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存,这样,后面的请求就去缓存中读取,请求使得能够迅速响应。 并发: 在大并发的情况下,所有的请求直接访问数据库,数据库出现连接异常。这个时候,就需要使用的的Redis的做一个缓冲操作,让请求先访问到的Redis的的,而不是直接访问数据库。redis优势:1.运行在内存,速度快官方号称支持并发11瓦特读操作,并发8瓦特写操作,可以说是相当彪悍了。2.数据虽在内存,但是提供了持久化的支持,即可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务3.支持数据结构丰富(string(字符串),list(链表),set(集合),zset(sorted set - 有序集合))和Hash(哈希类型,md5加密出来的那个串)课程大纲: 为了让大家快速系统了解Redis核心知识全貌,我为你总结了「Redis核心框架图」,帮你梳理学习重点,建议收藏!!

62,614

社区成员

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

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