작성
·
350
0
선생님 코드와 내용적으로는 다른 부분이 없는 것같은데 작동이 안합니다.
선생님 코드를 복붙하여 폴더 위치만 수정하면 제대로 작동합니다.
어떤 부분을 잘못 작성하여서 작동 안하는 걸까요??
import java.io.*;
import java.util.Scanner;
public class _Quiz_13 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\user\\Desktop\\Javaworkspace\\saying.txt"))) {
String quiz;
String answer;
String input;
while (true) {
quiz = br.readLine();
answer = br.readLine();
if(quiz == null || answer == null)
break;
}
System.out.println("(문제)" + quiz);
System.out.print("정답 입력 =>");
input = sc.next();
if(input.equals(answer)) {
System.out.println("정답입니다!");
} else {
System.out.println("틀렸습니다. 정답은" + answer + "입니다.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
답변 1
0
안녕하세요?
아래는 강의에서 제공되는 코드입니다.
if (quiz == null || answer == null) {
break;
}
아래는 질문자분께서 작성하신 코드입니다.
if(quiz == null || answer == null)
break;
중괄호의 있고 없음의 차이인데요. 사실 이렇게만 놓고 보면 if 의 동작은 동일하게 처리됩니다. 다만 위아래를 조금 더 볼게요.
아래는 강의에서 제공되는 코드입니다.
while (true) {
quiz = br.readLine();
answer = br.readLine();
if (quiz == null || answer == null) {
break;
}
System.out.println("(문제) " + quiz);
...
아래는 질문자분께서 작성하신 코드입니다.
while (true) {
quiz = br.readLine();
answer = br.readLine();
if(quiz == null || answer == null)
break;
} // <--- 이부분
System.out.println("(문제)" + quiz);
...
차이가 보이실까요?
if 문 내의 break; 다음 줄에 중괄호 } 를 닫으셨는데 이는 결과적으로 while 반복문의 시작 중괄호 { 와 상응하게 됩니다. 그래서 반복문에서는 그저 quiz 와 answer 를 읽기만 하는 동작이 된 것이죠. 이렇게 작성했을 때의 코드를 들여쓰기를 예쁘게 적으면 이렇습니다.
while (true) {
// 반복문 동작 시작
quiz = br.readLine();
answer = br.readLine();
if(quiz == null || answer == null)
break;
// 반복문 동작 끝
}
// 반복문과 무관한 문장의 시작
System.out.println("(문제)" + quiz);
...
퀴즈의 의도와 다른 동작을 하는 코드가 되어버린 것이죠. 그래서 잘못된 } 의 위치를 catch 바로 앞쪽으로 옮겨주시면 해결될 것으로 보입니다.
} else {
System.out.println("틀렸습니다. 정답은" + answer + "입니다.");
}
} // <-- 여기로 옮겨주세요
} catch (Exception e) {
e.printStackTrace();
}
수정 후 다시 확인해보세요 😊
감사합니다.
와 이걸 왜 캐치 못했을까요..ㅠㅠ 감사합니다!!