인프런 커뮤니티 질문&답변

Minkyung Kim님의 프로필 이미지
Minkyung Kim

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

퀴즈 #13

chap_13 Quiz 코드 질문드립니다.

작성

·

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();
}

수정 후 다시 확인해보세요 😊
감사합니다.

Minkyung Kim님의 프로필 이미지
Minkyung Kim
질문자

와 이걸 왜 캐치 못했을까요..ㅠㅠ 감사합니다!!

Minkyung Kim님의 프로필 이미지
Minkyung Kim

작성한 질문수

질문하기