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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

퀴즈13 질문입니다.

작성

·

183

0


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("속담 퀴즈입니다. 빈 칸에 알맞은 말을 입력하시오. (주관식)");
        System.out.println("-----------------------------------------------------");

        try (BufferedReader br = new BufferedReader(new FileReader("saying.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                String answer = br.readLine();
                String input = sc.next();

                System.out.println(line);
                System.out.print("정답 입력 ==> ");
                
                if (input.equals(answer)) {
                    System.out.println("정답입니다!!!");
                } else {
                    System.out.println("틀렸습니다. 정답은 " + answer);
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        System.out.println("-----------------------------------------------------");
        System.out.println("모든 퀴즈가 완료되었습니다.");
        System.out.println("수고하셨습니다.");

    }
}

퀴즈 13 질문입니다.

해당 문제 풀어본 결과입니다. 강의에서 알려주신 부분이랑 다른 부분이 있는데

혹시 제가 만든 코드가 올바른 코드인지 알려 주실 수 있을까요?

그리고 알려주신 정답이랑 비교했을 때 어떤 코드가 보다 차후 실제 업무에서 적합한 코드인지도 알려주셨으면 좋겠습니다.

감사합니다 !

답변 3

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

작성해주신 코드를 그냥 실행했을 때는 퀴즈가 바로 제시되지 않고 사용자 입력을 기다리는 문제가 있었습니다. 그래서 다음과 같이 while 문 내에서 주석으로 1, 2 작성한 부분의 코드를 수정해봤어요.

while ((line = br.readLine()) != null) {
    System.out.println(line); // 2. 이 곳으로 이동하여 문제 먼저 출력
    String answer = br.readLine();
    String input = sc.next();

    // System.out.println(line); // 1. 이 곳에 있던 코드를
    System.out.print("정답 입력 ==> ");

    if (input.equals(answer)) {
        System.out.println("정답입니다!!!");
    } else {
        System.out.println("틀렸습니다. 정답은 " + answer);
    }
}

이렇게 했을 때 다음과 같이 올바로 퀴즈를 진행할 수 있었네요.

속담 퀴즈입니다. 빈 칸에 알맞은 말을 입력하시오. (주관식)
-------------------------------------------------
(문제) 세 살 __ 여든까지 간다
 정답 입력 => 버릇
정답입니다!!!

(문제) 소 잃고 ___ 고친다
 정답 입력 => 화장실
틀렸습니다. 정답은 외양간입니다.

(문제) 천 리 길도 한 __부터
 정답 입력 => 끼니
틀렸습니다. 정답은 걸음입니다.

-------------------------------------------------
모든 퀴즈가 완료되었습니다.
수고하셨습니다. ^^

결과적으로 코드를 잘 작성해주셨습니다. 파일의 내용을 읽어와서 어떤 작업을 할 때 일반적으로는

while (true) { ... }

와 같은 무한 반복문 보다는 작성해주신 것처럼

while ((line = br.readLine()) != null) { ... }

와 같은 코드를 많이 사용합니다. 혹시 어떤 문제로 반복문을 올바로 탈출하지 못하고 계속 반복하는 경우를 방지하기 위해서 그렇습니다.

그리고 (속담 퀴즈입니다 ~ 수고하셨습니다) 부분을 try catch 문 외부에 넣거나 내부에 넣거나 큰 차이는 없습니다. 다만 (수고하셨습니다) 부분이 try catch 외부에 있게 되면 try 문 내에서 어떤 문제가 발생하여 퀴즈가 올바로 진행되지 않았을 경우에도 (수고하셨습니다) 라는 문장이 출력되는 경우가 발생할 수 있겠네요. 사용자는 퀴즈를 하나도 풀지 못했는데 수고했다는 메시지를 출력하면 프로그램의 동작이 다소 매끄럽지 않을 수 있습니다. 이런 경우에는 try catch 내에서 (수고하셨습니다) 라는 메시지를 출력하되, 예상치 못한 오류에 대비하여 catch 문 내에서 (문제가 발생하여 퀴즈가 올바로 진행되지 않았습니다) 정도의 메시지를 출력하면 더 좋을 것 같습니다 😊

감사합니다.

0

추가적으로 강의 내에서는 try-catch 구문 안에 모든 문장 ( 속담 퀴즈입니다 ~ 수고하셨습니다) 을 넣어주셨는데 혹시 안에 있는 거랑 밖에 있는 게 어떤 차이가 있나요?

0

안녕하세요, 인프런 AI 인턴입니다.

Van prime님의 질문과 비슷한 상황에 대한 답변이 이미 “나도코딩” 지식공유자님에 의해 제공되었으므로, 해당 답변을 참고하시는 것이 도움이 될 것 같습니다. Van prime님의 코드에는 ScannerBufferedReader를 사용하여 파일로부터 속담과 정답을 읽고 사용자의 입력을 받아 정답을 비교하는 로직이 포함되어 있습니다.

관련하여, "퀴즈 13 질문"에 대한 지식공유자님의 답변이 있습니다. 이 경우, 별도의 질문 내용과는 다소 차이가 있을 수 있으나, 파일을 읽고 사용자로부터 입력을 받는 방식에 어떻게 접근하는지에 대한 유사한 주제를 다루고 있습니다.

나도코딩의 퀴즈 #13에 대한 자세한 해설에서, ScannerBufferedReader를 사용하는 방법과 try-with-resources를 이용한 자원 관리에 대해서 설명하고 있습니다. 또한, 파일 읽기 행위에서 발생할 수 있는 예외 처리 방식에 대해서도 언급되어 있습니다.

Van prime님의 질문에서 언급된 “올바른 코드 판단”과 “실무 적합성”에 대해서는, 코드의 정확성, 가독성, 예외 처리의 충실성 등 여러 요소를 고려해야 합니다. 실무에서는 예외 상황을 철저하게 관리하고, 자원을 효율적으로 사용하는 코드가 선호됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기