2012-08-16 79 views
1

下面是代码我如何检查空指针异常

private static HashMap naturalNumbers = new HashMap(); 

static 
{ 
    naturalNumbers.put("zero", new Integer(0)); 
    naturalNumbers.put("one", new Integer(1)); 
    naturalNumbers.put("two", new Integer(2)); 
    naturalNumbers.put("three", new Integer(3)); 
} 

private static int findANumber(String partOfaNumber) throws Exception 
{ 
int multiplicand = 0; 
multiplicand += (Integer)naturalNumbers.get(partOfaNumber); 

如果“获取”返回null,我该如何检查呢?

我曾尝试:

if ((Integer)naturalNumbers == null) 
    { 
     throw new Exception("Number not found"); 
    } 
return multiplicand; 
} 

但IDE甚至不接受它:无法从HashMap中转换为整数。

+0

naturalNumbers的类型是HashMap中同时搜索,你为什么要(整数)naturalNumbers? – snow8261 2012-08-16 05:53:08

回答

5

这里有一个稍微不同的版本:

private static final HashMap<String, Integer> NUMS = new HashMap<String, Integer>(); 

static 
{ 
    NUMS.put("zero", 0); 
    NUMS.put("one", 1); 
    NUMS.put("two", 2); 
    NUMS.put("three", 3); 
} 

private static int findANumber(final String partOfaNumber) throws IllegalArgumentException 
{ 
    int multiplicand = 0; 
    final Integer theNum = NUM.get(partOfaNumber); 
    if (theNum != null) { 
     multiplicand += theNum; 
    } else { 
     throw new IllegalArgumentException("Number not found (" + partOfNumber + ")"); 
    } 

    return multiplicand; 
} 
+0

+1只是为了不抛出异常像其他人一样,但一个特定的例外。 – zengr 2012-08-16 06:00:28

+0

非常好,非常感谢。 – 2012-08-16 06:34:12

1

您可以使用速记如下 -

被乘数+ = naturalNumbers.get(partOfaNumber)== NULL? 0: (整数)naturalNumbers.get(partOfaNumber);

2

这很简单。

Integer number = naturalNumbers.get(partOfaNumber) 
if(number ==null) { 
    throw new Exception("Number not found"); 
} else { 
    multiplicand += number; 
} 
return multiplicand; 
1
private static int findANumber(String partOfaNumber) throws Exception 
{ 
    int multiplicand = 0; 
    if (naturalNumbers.containsKey(partOfaNumber); { 
    multiplicand += (Integer)naturalNumbers.get(partOfaNumber); 
    } else { 
    throw new Exception("Number not found"); 
    } 
    return multiplicand; 
} 
+0

是的,但是,做了两次查找,一次使用containsKey,一次使用get不是很有效率吗? – 2012-08-16 06:28:55

0

你将永远为空值从收集有关Java基本类型,由于自动装箱机制,增加检查

一个简单的空指针可以像下面那样生成

Integer i = null; 
i=i+10; 

所以总是添加默认检查空和你的情况,你可以像下面

Integer multiplicand = 0; 
Integer value = get(key); 

if(value!= null) 
{ 
//add value to multiplicand 
} 
0

首先,它会更好地使用特定的HashMap

private static HashMap<String, Integer> naturalNumbers = new HashMap<String, Integer>(); 

这将摆脱其添加令人讨厌的铸造。

至于你的问题,你试图将散列图转换为整数,这不是你想要的。你想检查一个特定的值是否存在。更好的方法是提取的价值和检查空:

int multiplicand = 0; 
Integer part = naturalNumbers.get(partOfNumber) 

if(part == null) { 
    // Handle the null case 
} 

multiplicand += part; 

现在的问题是,你有什么打算的情况下做的值不存在。如果您将不存在的值定义为零,则可以这样做:

multiplicand += (naturalNumbers.contains(partOfNumber)?naturalNumbers.get(partOfNumber):0; 

这使得它更加简洁。然而,这取决于你想要做什么,如果该值不包含在HashMap中。

1

只要检查密钥是否存在于Hashmap中。你不必担心空指针异常。

if(naturalNumbers.containsKey(partOfaNumber)){ 
    //Do your stuff 
}else{ 
    //Do some stuff what you will when exception throw. 
} 

您可以通过值利用

naturalNumbers.containsValue(value)