문제는 라인 토큰 끝을 처리하지 않아 스캐너가 매달려 있기 때문입니다. 다음과 같이하고 싶습니다.
import java.util.Scanner;
public class Foo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
boolean catcher = false;
do {
try {
System.out.print("Enter a number: ");
a = sc.nextInt();
catcher = true;
} catch (Exception e) {
} finally {
sc.nextLine();
}
}
// !!while(catcher == false);
while (!catcher);
System.out.println("a is: " + a);
}
}
또한 (z == false)는 잘못된 형식입니다. while (! z)을 사용하면 훨씬 나아집니다. 이렇게하면 while (z = false) 오류를 방지하고이를 표현하는 더 깨끗한 방법입니다. 마르셀로에 대한
편집 :
마르셀, 귀하의 의견과 조언에 감사드립니다! if 블록의 조건부가 부울 값인 스팸을 변경하지 않는다고 말하고 있습니까? 그것을 변경 않을 경우 그들이 경우 (스팸 == 거짓)를 작성하도록하는 경우, 코더이 기대하지 않기 때문에
boolean spam = true;
if (spam = false) {
System.out.println("spam = false");
}
System.out.printf("spam = %b%n", spam);
, 다음이에서 미묘하고도 위험한 부작용이있을 수 있습니다. 다시 한 번, 나를 명확히 해 주셔서 감사합니다!
이 코드는 거의 의미가 없습니다. 변수 포수는 선언되지 않았으며 루프 내에서 확실히 변경되지 않았습니다. 아마도 당신은 그것을 잘못 복사 했나요? 이와 같은 문제에 대해서는 가능한 한 자주 소형의 자체 컴파일 가능한 프로그램을 게시하는 것이 가장 좋습니다. –
이 줄은 while (z == false)으로 설정되어 있습니까? ??? – CoolBeans
나는 예스라고 생각하지만, 심지어 그것은 나쁜 형태이다. while (! z) while이 더 좋습니다. –