1

私の問題は、「彼」が意図したとおりにプログラムがコードを読み取っていないことです。

私は持っている

if (hero.getPos() == (6 | 11 | 16)) {
    move = new Object[] {"Up", "Right", "Left"};
} else {
    move = new Object[] {"Up", "Down", "Right", "Left"};
}

ヒーローの位置が 6 の場合でも、プログラムは別の場所に移動します。

何故ですか?オペランドのせいですか?はいの場合、どのように変更すればよいですか?

4

12 に答える 12

11

使用する:

if (hero.getPos() == 6 || hero.getPos() == 11 || hero.getPos() == 16)) {

これはあなたが望むことをします。

あなたがしたことは、ビットごとに、またはそれらの数値の間で実行されるhero.getPos()結果と比較することです。(6|11|16)

于 2013-03-05T16:15:48.800 に答える
4

他の答えは正しいです、あなたがセットを使うかもしれない別の考えをするだけです。

static final Set<Integer> positions = new HashSet<Integer>();
static{
    positions.add(6);
    positions.add(11);
    positions.add(16);
}

if (positions.contains(hero.getPos())){
    move = new Object[] {"Up", "Right", "Left"};
} else {
    move = new Object[] {"Up", "Down", "Right", "Left"};
}
于 2013-03-05T17:05:30.523 に答える
2

あなたはそのようにそれをすることはできません。3つの数値をビット単位でORします。

あなたはこのようにしなければなりません:

if (hero.getPos() == 6 || hero.getPos() == 11 | hero.getPos() == 16)) {
    move = new Object[] {"Up", "Right", "Left"};
} else {
    move = new Object[] {"Up", "Down", "Right", "Left"};
}

違いがわかりますか?|はビット単位またはwhile||は論理またはです。また、毎回比較を書き直す必要があることにも注意してください。

于 2013-03-05T16:16:31.883 に答える
2

(6 | 11 | 16)は、最初に 31 (二項演算) に評価されます。これは6 != 31です。あなたが望むものではありません。

すべての単一の位置をチェックすることをお勧めします (3 つしかないため、インラインが適切です。さらにループの使用を検討してください)。

if (hero.getPos() == 6 || hero.getPos() == 11 | hero.getPos() == 16)) {
    move = new Object[] {"Up", "Right", "Left"};
} else {
    move = new Object[] {"Up", "Down", "Right", "Left"};
}
于 2013-03-05T16:20:31.370 に答える
1

いいえ、ci.getNumber() == ...各値を確認するか、コレクションに追加して確認する必要がありますmyCollection.contains(ci.getNumber())。ただし、いくつかの既知の値に対してメソッドをチェックする場合は、コードの構造を再考する必要があります。

于 2010-01-04T19:46:21.580 に答える
1

からの回答を使用:

配列に特定の値が含まれているかどうかをテストするにはどうすればよいですか?

数値の配列を作成し、ci.getNumber() がその中にあるかどうかを確認できます。

于 2010-01-04T19:46:55.730 に答える
1

そのようなオペレーターはいません。ただし、数値を比較している場合は、スイッチを使用してそれをシミュレートできます。方法は次のとおりです。

int aNumber = ci.getNumber();
swithc(aNumber) {
    case 6252001:
    case 5855797:
    case 6251999: {
        ...
        break;
    }
    default: {
        ... // Do else.
    }
}

お役に立てれば。

于 2010-01-04T19:47:04.963 に答える
1
boolean theyAretheSame = num1 == num2 ? (num1 == num3 ? true:false):false;

私はこれをチェックしていないことを認めなければなりませんが、ロジックは正しいようです。

于 2012-01-16T03:46:38.787 に答える
1

いいえ。Set<Integer>一度作成してからそれを使用するか、次のようにすることができます。

int number = ci.getNumber();
if (number == 6252001 || number == 5855797 || number == 6251999)

これらの数値を定数に変更して、より意味のあるコードを取得することも検討します。

于 2010-01-04T19:47:20.627 に答える
0

すべての数値をコレクションに入れてから、contains()メソッドを使用できます。それ以外には、あなたがやりたいように比較するための特別な構文はないと思います。

于 2010-01-04T19:46:16.307 に答える
0

Java ではそれができません。ハッシュルックアップ(これはやり過ぎです)またはcaseステートメント、または大きなクラクションの醜い複数比較を実行できます。

if ((n==1 ) || (n==2) || ...
于 2010-01-04T19:46:42.610 に答える
0

いいえ、個別に比較する必要があります。

于 2010-01-04T19:55:49.940 に答える