1

我的问题是程序没有像我预期的“他”那样读取代码。

我有

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

当 hero 位置为 6 时,程序仍然转到 else。

这是为什么?是因为操作数吗?如果是,我应该如何改变它?

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

其他答案是正确的,只是您可能会使用 Sets 的想法不同。

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 数进行排序。

你必须这样做:

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: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

没有这样的运营商。但是,如果您要比较数字,则可以使用 switch 进行模拟。方法如下:

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

希望这可以帮助。

于 2010-01-04T19:47:04.963 回答
1

不,您可以创建Set<Integer>一次然后使用它,或者只是:

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

我还会考虑将这些数字更改为常量,以便获得更有意义的代码。

于 2010-01-04T19:47:20.627 回答
1
boolean theyAretheSame = num1 == num2 ? (num1 == num3 ? true:false):false;

我必须承认我没有检查过这个,但逻辑看起来是正确的。

于 2012-01-16T03:46:38.787 回答
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 回答