次のようなコードがあります:-
_class A
{
private HashMap<Character, Boolean> myMap;
public A()
{
myMap = new HashMap<Character, Boolean>();
String mychars = "asdfzxcvqwer";
for ( char c : mychars.toCharArray() )
myMap.put(c, true);
}
public doo(String input)
{
StringBuilder output = new StringBuilder();
for ( char c : input.toCharArray() )
{
if ( myMap.get(c) )
output.append(c);
}
}
...
...
}
_
if ( myMap.get(c) )
行でnullポインタ例外が発生しました-何が間違っていますか?
c
がmyMap
に含まれていない場合、null
が返されますが、boolean
としてボックス化解除することはできません。
試してください:
Boolean b = myMap.get(c);
if(b != null && b){
...
myMap
にc
に一致するキーが含まれていない場合、myMap.get(c)
はnullを返します。その場合、JVMがJava.lang.Boolean
オブジェクトをboolean
プリミティブに入れて条件を実行すると、nullオブジェクトが見つかったため、Java.lang.NullPointerException
。
次のブロックは、例にあるものと同等であり、NullPointerException
がある理由を理解しやすくする必要があります。
if (((Boolean) myMap.get(c)).booleanValue())
元の状態を次のように書き直します。
if ( myMap.containsKey(c) )
これがお役に立てば幸いです。
変化する
if ( myMap.get(c) )
に
if ( myMap.containsKey(c) && myMap.get(c))
これを変える
_for ( char c : input.toCharArray() )
{
if ( myMap.get(c) )
output.append(c);
}
_
このため
_for ( char c : input.toCharArray() )
{
if ( myMap.containsKey(c) )
output.append(c);
}
_
マップの定義されたメソッドを使用して、特定のキーがマップに登録されているかどうかを確認します。あなたはキーのグループをチェックしたいと思われるので、for
はそのままにしておきます。
myMap.get(c)
は、そのキーに関連付けられた値を返します。キーが登録されていない場合は、null
を返します。
補足として、このメソッドをカスタムオブジェクトで使用する場合は、hashcode
およびequals
メソッドを再定義する必要があることに注意してください。
提案:コードの正しい解釈ではない場合、それを無視してください。マップに特定の値が「含まれている」かどうかを判断するブール値のみが含まれている場合、マップはそのコンテキストでは意味をなさないため、代わりにHashSet
を使用することを強くお勧めします。
マップに必要なCharacter
を持つエンティティが存在しない場合、map.get(key)
はnull
を返し、if
ステートメント内でNullPointerException
がスローされます。
暗闇の中で刺す:c
に割り当てられた特定のキャラクターのエントリがマップにありますか?存在しない場合、Javaはnull値のボックス化を解除しようとしている可能性があります...
あなたのコードは非常に面倒です。
これが作業バージョンです:
import Java.util.HashMap;
public class A {
private HashMap<Character, Boolean> myMap;
public A() {
this.myMap = new HashMap<Character, Boolean>();
String mychars = "asdfzxcvqwer";
for ( char c : mychars.toCharArray() )
myMap.put(c, true);
}
public String execute(String input) {
StringBuilder output = new StringBuilder();
for ( char c : input.toCharArray() )
{
if ( this.myMap.get(c) != null )
output.append(c);
}
return output.toString();
}
public static void main(String[] args) {
A test = new A();
test.execute("abc");
}
}