这是代码
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 );
如果“get”返回null,我该如何检查?
我试过了:
if ( (Integer)naturalNumbers == null )
{
throw new Exception( "Number not found" );
}
return multiplicand;
}
但IDE甚至不接受它:无法从HashMap转换为Integer。
答案 0 :(得分: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;
}
答案 1 :(得分:2)
这很简单。
Integer number = naturalNumbers.get( partOfaNumber )
if(number ==null) {
throw new Exception("Number not found");
} else {
multiplicand += number;
}
return multiplicand;
答案 2 :(得分:1)
您可以使用以下速记 -
multiplicand + = naturalNumbers.get(partOfaNumber)== null? 0: (整数)naturalNumbers.get(partOfaNumber);
答案 3 :(得分: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;
}
答案 4 :(得分:1)
只需检查密钥是否存在于Hashmap中。你不必担心Null-Pointer Exception。
if(naturalNumbers.containsKey( partOfaNumber )){
//Do your stuff
}else{
//Do some stuff what you will when exception throw.
}
您也可以使用
按值搜索naturalNumbers.containsValue( value)
答案 5 :(得分:0)
由于java上的自动装箱机制,你总是必须为原始类型的集合添加空值检查
可以生成一个简单的空指针,如下所示
Integer i = null;
i=i+10;
因此,请始终为null添加默认检查,在您的情况下,您可以添加如下
Integer multiplicand = 0;
Integer value = get(key);
if(value!= null)
{
//add value to multiplicand
}
答案 6 :(得分:0)
首先,最好使用特定的HashMap
private static HashMap<String, Integer> naturalNumbers = new HashMap<String, Integer>();
将摆脱令人讨厌的铸造。
至于你的问题,你试图将哈希映射转换为整数,这不是你想要的。您想检查是否存在特定值。更好的方法是提取值并检查null:
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中,则取决于您要执行的操作。