请教一个Java的调试方案,错误原因.

爱么最牛逼的人 2014-03-11 11:37:17
我写了一个程序,含有下面的代码:
System.out.println("ChatServer.TeacherGrade.get(MyFriIntegerNum)                 "+ChatServer.TeacherGrade.get(MyFriIntegerNum));
System.out.println("ChatServer.TeacherGrade.get(MyFriIntegerNum).myclientds "+ChatServer.TeacherGrade.get(MyFriIntegerNum).myclientds);
System.out.println("ChatServer.TeacherGrade.get(MyFriIntegerNum).myclientds.get(MyIndexInteger) "+ChatServer.TeacherGrade.get(MyFriIntegerNum).myclientds.get(MyIndexInteger));
System.out.println("ChatServer.TeacherGrade.get(MyFriIntegerNum).myclientds.get(MyIndexInteger).MyState "+ChatServer.TeacherGrade.get(MyFriIntegerNum).myclientds.get(MyIndexInteger).MyState)

打印的结果如下:

其中上文的“TeacherGrade”是一个“HashMap的实例”,他的键为一个“Integer类型的变量”,他的值为一个我自定义的“WorkingSysMemDS”类型,本WorkingSysMemDS类型的代码如下:
public class WorkingSysMemDS {
HashMap<Integer,MyUserDS> myuserds = new HashMap<Integer,MyUserDS>();
HashMap<Integer,MyUserDS> myclientds = new HashMap<Integer,MyUserDS>();
Integer MyUserKeyNum = -1;
byte MyUserGrade = 0;
boolean MyState = true;

public Integer getMyUserKeyNum() {
return MyUserKeyNum;
}
public void setMyCodestate(boolean state){
MyState = state;
}
public void setMyUserKeyNum(Integer OurUserKeyNum) {
MyUserKeyNum = OurUserKeyNum;
}
public byte getMyUserGrade() {
return MyUserGrade;
}
public void setMyUserGrade(byte UserGrade) {
MyUserGrade = UserGrade;
}
public WorkingSysMemDS(Integer MyUserKey,byte i,boolean state,String MyFriRole){
MyUserKeyNum = MyUserKey;
MyUserGrade = i;
MyState = state;
if(MyFriRole.equals("Cus")){
myuserds.put(MyUserKeyNum, new MyUserDS(MyUserKeyNum,MyUserGrade,MyState));
}else{
myclientds.put(MyUserKeyNum, new MyUserDS(MyUserKeyNum,MyUserGrade,MyState));
}
}
}

上面的打印语句中的代码“TeacherGrade”,是一个HashMap,他的init部分的代码如下:
for(Integer i = 0;i<203;i++){
for(Integer j= 0;j<203;j++){
TeacherGrade.put(i, new WorkingSysMemDS(j,(byte)1,false,"Mem"));
}
}

我已经将上面的TeacherGrade中的数据结构,进行了init了呀?
为什么还会报错呢?
上面打印的语句语句中的MyFriIntegerNum这个变量的值为1,MyIndexInteger的值为2.
希望能够得到高手的相助:
为什么我打印语句出的结果,会有:
最后一行为“NullPointerException”,而倒数第二行代码打印的结果为:
null
值?
希望高手帮帮忙!!
这个错误怎么调?
这个错误是什么原因?
...全文
141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
上面的代码,我是为了记录我的系统的维护数据而进行的,具体的详细内容,请大家见: 2014,北京,邮电大学,6月份,的研究生答辩. 软件工程系,(学校“最牛逼的一个”屌丝),一位哥们儿的答辩大会. 一个“划时代的作品”,即将面世. 敬请期待.
福来哥 2014-03-11
  • 打赏
  • 举报
回复
下面的两层for循环我没看明白 当i=0时: TeacherGrade.put(0, new WorkingSysMemDS(j,(byte)1,false,"Mem")); 会执行203次,有什么意义呢?
haha_321 2014-03-11
  • 打赏
  • 举报
回复
这就是个空指针错误,由于你第三行的值为null所有当你第四行打印时有了这个对象的方法出现空指针错误
huijie2011 2014-03-11
  • 打赏
  • 举报
回复
上面的代码效果等同于for(Integer i = 0;i<203;i++){ TeacherGrade.put(i, new WorkingSysMemDS(203,(byte)1,false,"Mem")); } 比如当I=1时,J循环到2与put之后,此时,TeacherGrade.get(1)已经由原本的new WorkingSysMemDS(1,(byte)1,false,"Mem")变成了new WorkingSysMemDS(2,(byte)1,false,"Mem")了,new WorkingSysMemDS(1,(byte)1,false,"Mem")这个VALUE已经被覆盖掉了,因为相对TeacherGrade他的键 1只能对应一个数据

62,616

社区成员

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

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