-1

ブール値を比較しているときに問題に直面しています。ループをブロック内に入れたいのですが、ブロックに入っていません。

else if (!(keyCompare.contains(compareKey)) || (save == true)) {
 //do something
}

ここで!(keyCompare.contains(compareKey)は false を返します。ベクトルkeyCompareにcompareKeyがないか、保存がtrueの場合はifループに入りますが、そうではありません。

私はどこで間違っていますか?

4

2 に答える 2

0

次の 3 つの可能性があります。

  1. このブロックの上の if または else if ブロックが実行中です。
  2. contains によって例外がスローされています。
  3. あなたは間違っており、これらの条件は両方とも誤りです。

デバッガーは、どの可能性が正しいかを正確に教えてくれます。ここで議論する必要はまったくありません - これらは文字通り 3 つの可能性しかありません。

于 2012-08-01T22:19:38.450 に答える
0

次のようなクラスがあるとします。

static class Contents {
  private String contents;
  public Contents(String contents) {
    this.contents = contents;
  }
}

次のコードを記述します。

Vector<Contents> v = new Vector<>();
v.add(new Contents("a"));
System.out.println("Contains a: "+v.contains(new Contents("a")));

次の出力が得られます。

Contains a: false

ただし、次equalsのようにメソッドをContentsクラスに追加します。

public boolean equals(Object obj) {
  return Objects.equals(this.contents, ((Contents)obj).contents);
}

突然、次の結果が得られます。

Contains a: true

より良い実装は次のようになります。

@Override
public boolean equals(Object obj) {
  if (this == obj) return true;
  if (obj == null) return false;
  if (getClass() != obj.getClass())return false;
  final Contents other = (Contents) obj;
  if (!Objects.equals(this.contents, other.contents))return false;
  return true;
}
于 2016-05-12T01:48:30.540 に答える