Java if语句中带int的Or操作数
我的问题是程序并没有像我预期的“他”那样读取代码 我有Java if语句中带int的Or操作数,java,eclipse,int,operand,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时,程序仍转到其他位置 为什么呢?是因为操作数吗?如果是,我应该如何更改它?您可以将所有数字放在一个集合中,然后使用c
if (hero.getPos() == (6 | 11 | 16)) {
move = new Object[] {"Up", "Right", "Left"};
} else {
move = new Object[] {"Up", "Down", "Right", "Left"};
}
当英雄位置为6时,程序仍转到其他位置
为什么呢?是因为操作数吗?如果是,我应该如何更改它?您可以将所有数字放在一个集合中,然后使用
contains()
方法。除此之外,我不认为有任何特殊的语法可以像您希望的那样进行比较。不,您需要为每个值检查ci.getNumber()==…
,或者将它们添加到集合中,然后检查myCollection.contains(ci.getNumber())
。但是,如果要根据几个已知值检查一个方法,您可能需要重新考虑代码的结构。Java不允许您这样做。您可以执行散列查找(这是一种过分的做法),也可以执行case语句,或者执行一个大而丑陋的多重比较:
if ((n==1 ) || (n==2) || ...
使用以下来源的答案:
您可以创建一个数字数组,并检查其中是否包含ci.getNumber()。没有此类运算符。但若你们在比较数字,你们可以用开关来模拟。以下是如何:
int aNumber = ci.getNumber();
swithc(aNumber) {
case 6252001:
case 5855797:
case 6251999: {
...
break;
}
default: {
... // Do else.
}
}
希望这能有所帮助。否。您可以创建一个
集
一次,然后使用它,或者:
int number = ci.getNumber();
if (number == 6252001 || number == 5855797 || number == 6251999)
<>我也会考虑把这些数字变成常量,这样你就可以得到更多有意义的代码。 不。你必须单独比较它们
boolean theyAretheSame = num1 == num2 ? (num1 == num3 ? true:false):false;
我必须承认我没有检查这个,但是逻辑看起来是正确的。使用:
if (hero.getPos() == 6 || hero.getPos() == 11 || hero.getPos() == 16)) {
这会满足你的要求
您所做的是将
hero.getPos()
与那些数字之间的(6 | 11 | 16)
结果进行比较。您不能这样做。它按位对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"};
}
你看到区别了吗
是位or,而
是逻辑or。
还请注意,每次都必须重写比较。(6 | 11 | 16)
将首先计算为31(二进制操作),即6!=31
。不是你想要的
最好是检查每一个位置(你只有3个,所以内联是好的,更多地考虑使用循环):
其他答案都是正确的,只是你可以用不同的思维方式来使用集合
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"};
}
static final Set positions=new HashSet();
静止的{
增加(6);
增加(11);
增加(16);
}
if(positions.contains(hero.getPos())){
移动=新对象[]{“向上”、“向右”、“向左”};
}否则{
移动=新对象[]{“上”、“下”、“右”、“左”};
}
Python:if(1,2,5)中的a:。。。如果这些是你知道的常数,那么你可以做一些小把戏。如果数字列表很大,则将它们放入一个集合中,并检查ci.getNumber()是否也在该集合中。比较这些值后,您想做什么?您必须对每个测试值执行单独的==
。因此,没有像我这样简单的方法吗?只是不要添加中断->案例6:case 11:case 16:dosmt();中断代码>我在添加它:FIY:这个答案从FYI合并:这个答案从FYI合并:这个答案从FYI合并:这个答案从FYI合并:这个答案从FYI合并:这个答案从FYI合并:这个答案与FYI合并:这个答案从
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"};
}