日期:2014-05-20  浏览次数:20988 次

Java 菜鸟问题,找不到错误···
package com.maptest;

import java.util.*;

public class HashTest2 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap hashMap = new HashMap();
for (int i = 0; i < args.length; i++) {
if (args[i] == null) {
hashMap.put(args[i], new Integer(1));
}else {
Integer integer = (Integer)hashMap.get(args[i]);
integer = new Integer(integer.intValue()+1);  // 这里是第 18 行
hashMap.put(args[i], integer);
}
}

Set set = hashMap.keySet();


for (Iterator iterator = set.iterator(); iterator.hasNext();) {
String key = (String)iterator.next();
Integer value = (Integer)hashMap.get(key);
System.out.println(key + " = " + value);
}
}
}

我在eclipse 中传入了参数,可是为什么说第十八行,出现空指针异常···
即:
Exception in thread "main" java.lang.NullPointerException
at com.maptest.HashTest2.main(HashTest2.java:18)


------最佳解决方案--------------------
if (args[i] == null) {
hashMap.put(args[i], new Integer(1));
}else {
Integer integer = (Integer)hashMap.get(args[i]);
integer = new Integer(integer.intValue()+1); // 这里是第 18 行
hashMap.put(args[i], integer);
}
}很明显的错误啊。你的args[i]为空的时候你放入值1 不为空进入下面循环hashMap里面一个元素没有所以hashMap.get(args[i])一定是Null啊  所以你的integer是Null 所以null.intValue()才会爆空指针这很明显你的逻辑错误
------其他解决方案--------------------
出错原因:因为你的hashMap在你取值之前,
没有赋值,所有当然取不到。

建议你用Eclipse Debug调试下。就知道程序的执行顺序了。

------其他解决方案--------------------
引用:
if (args[i] == null) {
hashMap.put(args[i], new Integer(1));
}else {
Integer integer = (Integer)hashMap.get(args[i]);
integer = new Integer(integer.intValue()+1); // 这里是第 18 行
hashMap.put(args[i……

太对了
------其他解决方案--------------------
hashMap是空的,第17行取出的integer是null,所以报错。
看楼主的代码,似乎这句:
if (args[i] == null) 

应该改一下:

if ((Integer)hashMap.get(args[i]) == null) 

楼主试试。
------其他解决方案--------------------
楼上正解
------其他解决方案--------------------
谢谢了,好傻的我···应该是判断 HashMap 中有没有···