문제
나는 그 모습을 볼 때 : 다음과 같습니다.
User user = userDao.Get(1);
do
{
// processing
// get the next user
//
user = UserDao.GetNext(user.Id);
if(user == null)
continue; // will this work?????????????
}
while ( user != null)
그것이 작동한다면, 그것은 do 진술의 맨 위로 가고, 사용자가 무효화되어 상황이 깨질 것입니까?
어쩌면 나는 루프를 잠시 문장으로 재 작업해야합니까?
해결책
계속해서 Botton의 평가로 점프하면 프로그램이 다른 반복 또는 종료를 계속 해야하는지 평가할 수 있습니다. 이 경우 종료됩니다.
이것은 사양입니다. http://java.sun.com/docs/books/jls/third_edition/html/statements.html#6045
이러한 언어 질문은 Java 언어 사양에서 검색 할 수 있습니다. http://java.sun.com/docs/books/jls/
다른 팁
이것은 실제로이 코드를 작성하는 가장 좋은 방법이 아닙니다. 사용자가 NULL 인 경우 다음에 사용자를 얻으려고 시도하면 NULLPOINETEREXCEPTION이됩니다. 더 좋은 방법은 다음과 같습니다.
User user = UserDao.Get(1);
while(user != null) {
// do something with the user
user = UserDao.GetNext(user.id);
}
두 곳에서 사용자를 테스트하는 이유는 무엇입니까? 사용자가 NULL 일 때 조건이 루프를 종료합니다. 이것이 바로 원하는 것입니다.
예, continue
루프를 통해 작동합니다.
당신은 아마 사용하고 싶을 것입니다 break
대신에 continue
사용자 처리를 중지하거나 if null continue
어쨌든 사용자가 null이 되 자마자 while 루프가 나오기 때문에 완전히 비트.
짧은 대답 예, 루프 중에 수행하는 동안 계속 작동하고 휴식을 취하십시오.
다른 사람들이 지적했듯이, 예에서 나오면 계속해서 잘못된 행동을 기대하고있는 것처럼 보입니다.
보자 :
$cat DoWhileContinue.java
class DoWhileContinue {
public static void main( String [] args ) {
int i = 0;
int y = 0;
do {
i++;
if( i > 100 ) {
continue;
}
y++;
} while( i < 500 );
System.out.printf("i=%d, y=%d %n", i, y );
}
}
$javac DoWhileContinue.java
$java DoWhileContinue
i=500, y=100
예, 그렇습니다. 이 샘플에서는 볼 수 있습니다 y
가치는입니다 100
때문에 continue
성명서가 실행되었고 그 후 변수가 증가하지 못했습니다.
계속해서는 동일한 것을 평가하는 동안 귀하의 IF와 동안 중복 된 것처럼 보이는 While 내부의 루프 평가 명령문으로 이동합니다. 나는 휴식을 사용하거나 단순히 잠시 조건이 작업을 수행하는 것이 더 낫다고 생각합니다 (당신의 상태는 이미 당신을 위해 그것을 확인하고 있습니다).