Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java if语句中带int的Or操作数_Java_Eclipse_Int_Operand - Fatal编程技术网

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