Java: do while wont while
Anfallare.armees = 10;
Forsvarare.armees = 10;
do{
Anfallare.slaTarningar();
Forsvarare.slaTarningar();
Anfallare.visaTarningar();
Forsvarare.visaTarningar();
MotVarandra(Anfallare, Forsvarare);
status(Anfallare, Forsva开发者_StackOverflow社区rare);
}while(Anfallare.armees == 0 || Forsvarare.armees == 0);
is what I have, I tried also a
System.out.println(Anfallare.armees + " :: " + Forsvarare.armees);
after this do while and it is 9 and 10, neither of them are 0.
Why does it run this once?
Because, as you point out, after the first run, Anfallare.armees is 9, which does not equal 0, and Forsvarare.armees is 10, which is not equal to 0.
Perhaps you meant
while(Anfallare.armees != 0 && Forsvarare.armees != 0)
while(Anfallare.armees == 0 || Forsvarare.armees == 0)
Means continue only if Anfallare.armees == 0 || Forsvarare.armees == 0
. In your example, neither is 0 so it will not loop.
while(Anfallare.armees != 0 && Forsvarare.armees != 0)
Means, stop looping if either are zero (Anfallare.armees != 0 && Forsvarare.armees != 0
)
You may actually be wanting:
while (Anfallare.armees != 0 || Forsvarare.armees != 0)
means, stop looping if both are 0
You need to do
while(Anfallare.armees != 0 || Forsvarare.armees != 0);
To make it loop until both of those variables are 0
Because you start as do{}
, which forces to execute at least once the code, and then you have while x==0
, which is not true. Since it is not true, the loop ends.
As you see in the other answers, you may need to check for x != 0
(not equal to), or even better x>0
(in the event x could take a negative number)
Take some time to read the Oracle's Java tutorials I linked in the other answer to you. It explains the loop logic very well.
If I understand you correctly, your do-while
loop body is executed once, but you think it shouldn't have run at all - is this correct?
The reason is, in do-while the loop condition is checked only after the loop body is executed. I.e. it will always run at least once.
It's hard to tell without the complete code, but it may be that you just need to invert the condition:
}while(!(Anfallare.armees == 0 || Forsvarare.armees == 0));
You condition says ... as long as one of them is 0
. What you'll want is this:
while(Anfallare.armees > 0 || Forsvarare.armees > 0);
the reason is simple
while loops when the expression is true.
so what you want is
while(Anfallare.armees != 0 || Forsvarare.armees != 0);
but even better I would suggest
while(Anfallare.armees > 0 || Forsvarare.armees > 0);
this would allow you to be sure that your armee count never gets negative ^^
Jason
精彩评论