我的问题是程序没有像我预期的“他”那样读取代码。
我有
if (hero.getPos() == (6 | 11 | 16)) {
move = new Object[] {"Up", "Right", "Left"};
} else {
move = new Object[] {"Up", "Down", "Right", "Left"};
}
当 hero 位置为 6 时,程序仍然转到 else。
这是为什么?是因为操作数吗?如果是,我应该如何改变它?
采用:
if (hero.getPos() == 6 || hero.getPos() == 11 || hero.getPos() == 16)) {
这将做你想要的。
您所做的是与将按位或在这些数字之间进行比较hero.getPos()
的结果。(6|11|16)
其他答案是正确的,只是您可能会使用 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"};
}
你不能那样做。它按位对 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())
。但是,如果您根据几个已知值检查方法,您可能需要重新考虑代码的结构。
没有这样的运营商。但是,如果您要比较数字,则可以使用 switch 进行模拟。方法如下:
int aNumber = ci.getNumber();
swithc(aNumber) {
case 6252001:
case 5855797:
case 6251999: {
...
break;
}
default: {
... // Do else.
}
}
希望这可以帮助。
不,您可以创建Set<Integer>
一次然后使用它,或者只是:
int number = ci.getNumber();
if (number == 6252001 || number == 5855797 || number == 6251999)
我还会考虑将这些数字更改为常量,以便获得更有意义的代码。
boolean theyAretheSame = num1 == num2 ? (num1 == num3 ? true:false):false;
我必须承认我没有检查过这个,但逻辑看起来是正确的。
您可以将所有数字放在一个集合中,然后使用该contains()
方法。除此之外,我不相信有任何特殊的语法可以像你想要的那样进行比较。
Java不会让你这样做。您可以进行哈希查找(这有点过头了)或 case 语句,或大喇叭丑陋的多重比较:
if ((n==1 ) || (n==2) || ...
不..您必须单独比较它们。