或者在if语句中使用int的操作数

时间:2013-03-05 16:15:04

标签: java eclipse int operand

我的问题是程序没有读取代码,因为我打算“他”会这样做。

我有

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

当英雄位置为6时,程序仍会转到其他位置。

为什么?是因为操作数?如果是的话,我应该如何改变呢?

12 个答案:

答案 0 :(得分:11)

使用:

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

这将做你想要的。

您所做的是将hero.getPos()(6|11|16)的结果进行比较,{{1}}将在这些数字之间进行bitwise or

答案 1 :(得分: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"};
}

答案 2 :(得分: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"};
}

你看到了区别吗? |是按位或||是逻辑或。 另请注意,您每次都必须重写比较。

答案 3 :(得分: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"};
}

答案 4 :(得分:1)

不,您需要为每个值检查ci.getNumber() == ...,或者将它们添加到集合中并检查myCollection.contains(ci.getNumber())。但是,如果要针对多个已知值检查方法,则可能需要重新考虑代码的结构。

答案 5 :(得分:1)

使用以下答案:

How can I test if an array contains a certain value?

你可以创建一个数字数组并检查你的ci.getNumber()是否在其中。

答案 6 :(得分:1)

没有这样的操作员。但是如果你要比较数字,你可以使用switch do simulate。方法如下:

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

希望这有帮助。

答案 7 :(得分:1)

没有。你可以创建一次Set<Integer>,然后使用它,或者只是:

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

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

答案 8 :(得分:1)

boolean theyAretheSame = num1 == num2 ? (num1 == num3 ? true:false):false;

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

答案 9 :(得分:0)

您可以将所有数字放在集合中,然后使用contains()方法。除此之外,我不相信有任何特殊的比较语法可以像你想做的那样。

答案 10 :(得分:0)

Java不会让你这样做。你可以进行哈希查找(对于这个来说是过度杀戮)或者是一个案例陈述,或者是一个大胡扯丑陋的多重比较:

if ((n==1 ) || (n==2) || ...

答案 11 :(得分:0)

不..你必须单独比较它们。