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

キーがハッシュマップ内に存在するかどうかを確認するだけです。Null-PointerExceptionについて心配する必要はありません。

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 に答える
1

次のように省略形を使用できます-

乗数 += 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 に答える
0

Javaの自動ボクシングメカニズムのため、プリミティブ型のコレクションからnull値のチェックを常に追加する必要があります

単純なnullポインタは次のように生成できます

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 に答える