Or operand with int in if statement

折月煮酒 提交于 2019-12-02 06:56:36

Use:

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

This will do what you want.

What you did is comparing hero.getPos() with the result of (6|11|16) which will do bitwise or between those numbers.

The other answers are correct, just thinking differently you may use 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"};
}

You cannot do it like that. It ors the 3 number bitwise.

You have to do like this :

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

You see the difference ? | is a bitwise or while || is a logical or. Note also that you have to rewrite the comparison each time.

(6 | 11 | 16) would be evaluated first to 31 (binary operation), which is 6 != 31. Not what you want.

Better is to check every single position (you have only 3, so inline is good, for more consider using a loop):

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

No, you're going to need to check ci.getNumber() == ... for each value, or add them to a collection and check myCollection.contains(ci.getNumber()). However, you may want to re-think the structure of your code if you are checking a method against several known values.

John Boker

using the answer from:

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

you could create an array of numbers and check if your ci.getNumber() is in it.

Jon Skeet

No. You could create a Set<Integer> once and then use that, or just:

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

I'd also consider changing those numbers into constants so that you get more meaningful code.

There is no such operator. But if you are comparing number, you can use switch do simulate that. Here is how:

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

Hope this helps.

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

I must admit I haven't checked this but the logic looks correct.

You could put all the numbers in a collection, and then use the contains() method. Other than that, I don't believe there is any special syntax for comparing like you want to do.

Java won't let you do that. You can do a hash lookup (which is overkill for this) or a case statement, or a big honking ugly multiple compare:

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

no.. you have to compare them individually.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!