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 );

如果“get”返回 null,我该如何检查?

我试过了:

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

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

4

7 回答 7

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;
}
于 2012-08-16T05:57:37.757 回答
2

这很简单。

Integer number = naturalNumbers.get( partOfaNumber )
if(number ==null) {
    throw new Exception("Number not found");
} else {
    multiplicand += number;
}
return multiplicand;
于 2012-08-16T05:56:35.967 回答
1

您可以按如下方式使用速记 -

multiplicand += naturalNumbers.get(partOfaNumber) == null ?0 : (整数) naturalNumbers.get(partOfaNumber );

于 2012-08-16T05:55:49.080 回答
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;
}
于 2012-08-16T05:57:46.787 回答
1

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

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

您还可以使用按值搜索

naturalNumbers.containsValue( value)
于 2012-08-16T06:26:38.240 回答
0

由于 java 上的自动装箱机制,您将始终必须从原始类型的集合中添加空值检查

可以生成一个简单的空指针,如下所示

Integer i = null;
i=i+10;

因此,请始终为 null 添加默认检查,在您的情况下,您可以像下面这样添加它

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

if(value!= null)
{
//add value to multiplicand
}
于 2012-08-16T06:11:27.170 回答
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 中,这取决于您要执行的操作。

于 2012-08-16T06:12:58.230 回答