问题
My problem is that program is not reading codes as i intended "he" would.
I have
if (hero.getPos() == (6 | 11 | 16)) {
move = new Object[] {"Up", "Right", "Left"};
} else {
move = new Object[] {"Up", "Down", "Right", "Left"};
}
When hero position is 6, the program still goes to else.
Why is that? Is it because of operands? If yes, how should i change it?
回答1:
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.
回答2:
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"};
}
回答3:
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.
回答4:
(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"};
}
回答5:
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.
回答6:
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.
回答7:
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.
回答8:
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.
回答9:
boolean theyAretheSame = num1 == num2 ? (num1 == num3 ? true:false):false;
I must admit I haven't checked this but the logic looks correct.
回答10:
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.
回答11:
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) || ...
回答12:
no.. you have to compare them individually.
来源:https://stackoverflow.com/questions/2001691/java-operators-compare-multiple-values