开发者

While Loop Weirdness in Java

开发者 https://www.devze.com 2023-02-01 17:05 出处:网络
I noticed that java (hence probably C) has no problem with this: whi开发者_如何学运维le(condition1) {

I noticed that java (hence probably C) has no problem with this:

whi开发者_如何学运维le(condition1) {
    //do somethin'
} while(condition2);

Is this the same as:

while(condition1 && condition2) {
    //do somethin'
}


No, you have two loops.

while(condition1) {
  // do something
}

while(condition2); // second loop which does nothing.

The second loop is the same as

while(condition2) { }

EDIT: My suggestion is to use the automatic formatter in your IDE regularly. Otherwise you can create formatting which suggests the code does things it doesn't.

example 1

if (condition)
    statement1;
    statement2;
statement3;

In this example, it appears that the first two statements are part of the if condition, but only the first is.

example 2

http://www.google.com/
statement;

Doesn't look like legal Java, but it is, not for the reasons the formatting suggests ;)


No, they are different.

The first while(condition1) will run first.

Then comes while(condition2), which has nothing after it except a single ; which means it's just some empty statement.

Remember that in control blocks like if, for, while, if you don't use the {} braces, then only the first immediate statement after it will be considered part of it.

Example:

if (condition)
    System.out.println("hello"); // prints only if condition is true.
    System.out.println("no"); // not bound to the 'if'. Prints regardless.

while (condition)
    ; // do nothing!
    System.out.println("something"); // not bound to the while

Edit The empty while loop is mentioned in the Java code conventions

7.6 while Statements

A while statement should have the following form:

while (condition) {
    statements;
}

An empty while statement should have the following form:

while (condition);


There is no construct is java as shown in the first form. You have probably seen

do {

} while (cond)

EDIT : You are misreading the first form. There should have been a line break after the }. This confused me as well.

0

精彩评论

暂无评论...
验证码 换一张
取 消