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

我的问题是,程序不是读取代码,因为我打算“他”。

我有

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

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

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

使用:

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

这将做你想要的。

你所做的是将hero.getPos()(6|11|16)的结果进行比较,这将按位或按这些数字进行。

其他答案是正确的,只是以不同的方式思考你可以使用集合。

 static final Set positions = new HashSet(); 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"}; } 

你不能这样做。 它按位数为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"}; } 

你看到了区别? | 是一个按位或同时|| 是合乎逻辑的。 另请注意,您每次都必须重写比较。

(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"}; } 

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

使用答案来自:

如何测试数组是否包含某个值?

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

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

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

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

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

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

希望这可以帮助。

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

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

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

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

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

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