2012-01-02 18 views
1

ArrayList "allVariables"には整数の配列が含まれています。この配列に数値1が含まれているかどうかを調べる必要があります。もしそうであれば、答えは偽でなければなりません。ArrayList内の数字を見つける

私はいくつかのコードを書いたが、それはjava.lang.NullPointerExceptionになり:

封じ込めチェックのために
private boolean notIncluded(int ind, ArrayList<Color> c) { 
    ArrayList<Integer[]> allVariables = new ArrayList<Integer[]>(); 
     // Filling the ArryList 

    for (int k = 0; k < c.size(); k++) { 
     allVariables.add(c.get(k).getColor()); // returns Integer[] 
    } 

    if (Arrays.asList(allVariables).contains(1)) { 
     return false; 
    } 

    return true; 
} 
+1

stacktraceを表示してください。 – home

+1

は '.contains'に何らかの異議を唱えましたか? – bmargulies

+1

allVariablesはすでにリストです。なぜArrays.asList(..)をもう一度行う必要がありますか?パラメータ 'c'がnullでないことを確認しますか? – kosa

答えて

1

コードでヌルをチェックする必要があります。次のコードは、必要な処理の実装を試み、処理中にnullをチェックします。

public function allVariablesContains(List<Integer[]> allVariables, int intToSearchFor) 
{ 
    if (allVariables == null) 
     return false; 
    for (int i = 0; i < allVariables.Length; i++) 
    { 
     if (allVariables[i] == null) 
      continue; 
     if (Arrays.asList(allVariables).contains(intToSearchFor)) 
      return true; 
    } 
    return false; 
} 
1

Listデータstrctureを使用しないでください。これはまさに私たちがSet(または具体的にはHashSet)を持っている理由です。

indColorインスタンスにマップする方法が見つかる場合は、非常に迅速な「包含」チェックを行うことができます。

+0

値がリストに1回以上含まれていなければ、この勧告はうまくいかず、リストはより適切になります。 –

+0

@edalorzo:大雑把に言えば、検索の場合は、検索を「調整する」ために使用できるオブジェクトの内容を無視するため、ほとんどの場合、「リスト」は悪い解決策です。この場合のより良いことは、クラスのデザインを再訪し、フレンドリーな "検索"のようにします。例えば、 'Color'の整数成分を使って' hashCode'を計算することができます。これは 'Color'インスタンスのバケットをすばやく見つけるために使うことができます。その後、高価な 'equals()'チェックに落ちるのはそれほど難しくありません。 –

+0

そのリストを検索することは悪い解決策であると言っているのは、実際には大胆な確認です。とにかく、私の主張は、リストに繰り返し要素があることが意図されている場合、Setは機能しないということです。 –

1

cc.get(k)でヌルチェックを実行してください。

1

Arrays.asList(allVariables):allVariablesは配列ではなく、配列のリストです。

関連する問題