오답 노트-자바(Java)

24.11.06(수) "뭐야, 내 3만 원 돌려줘요."

writingforever162 2024. 11. 7. 19:29

[참고 및 인용 출처]

1. 구글 검색: 티스토리, "나누기 구조", 컴퓨터 연산-나눗셈, (2024.11.07)

2. 구글 검색: 수학사랑, "나누기 dividend", 나눗셈(division), (2024.11.07)

 

[문제]

public class VariableExtraPractice {
    public static void main(String[] args) {
        int dividend;
        // [1] 정수형 int 타입 변수 dividend 선언
        dividend = 10;
        // [2] dividend 변수에 값 10을 넣어 변수 초기화
        // [복습 1] 변수 선언 및 초기화를 함께 할 수 있다.
        //          즉, int dividend=10; 또한 가능하다.
        // [dividend] 피제수, 일명 '나뉘는 수'를 의미한다. 

        int divisor;
        // [3] 정수형 int 타입 변수 divisor 선언
        divisor = 7;
        // [4] divisor 변수에 값 7을 넣어 변수 초기화
        // [복습 2] int divisor=7; 또한 가능하다.
        // [divisor] 제수, 일명 '나누는 수'를 의미한다. 

        double quotient = dividend/divisor;
        // [5] 실수형 double 타입 변수 quotient 선언 및 초기화
        // 초기화 값은 dividend 변수를 divisor 변수로 나눈 몫
        // [quotient] '몫'을 뜻한다. 나머지는 'remainder'이다.

        System.out.printf("%d만 원 나누기 %d명 해서 각자 %.1f만 원입니다. %n", dividend, divisor, quotient);
        // [6] 기대한 출력문: 10만 원 나누기 7명 해서 각자 1.4만 원입니다.
    }
}

수요일에는 정말 고비의 연속이나 다름없었다. 자바(Java)라도 잘 실행되면 그나마 나았으련만. 분명히 몫에 해당하는 quotient 변수를 실수형인 double로 선언했는데도 갑자기 1만 원이 나와서 화면이 뻥 뚫리도록 쳐다봤다. 노려봤다는 표현이 더 정확할지도 모르겠다.

 

[원인]

public class VariableExtraPractice {
    public static void main(String[] args) {
        int dividend;
        dividend = 10;

        int divisor;
        divisor = 7;

        double quotient = (double)dividend/divisor;
        // [오답] dividend/divisor
        // [정답 1] (double)dividend/divisor
        // [정답 2] dividend/(double)divisor

        System.out.printf("%d만 원 나누기 %d명 해서 각자 %.1f만 원입니다. %n", dividend, divisor, quotient);
    }
}

원인은 (double) 누락에 있었다. 애초에 dividend 변수와 divisor 변수 타입이 정수형이었기 때문에 나누기를 하면 1만 출력되었다. 1을 실수형 변수 quotient에 저장했으니, 1.0으로 나올 수밖에 없었다. 계산할 때부터 dividend/divisor에 (double)을 붙여주어야 했다.

 

[해결]

public class VariableExtraPractice {
    public static void main(String[] args) {
        int dividend;
        dividend = 10;

        int divisor;
        divisor = 7;

        double quotient = (double)dividend/divisor;

        System.out.printf("%d만 원 나누기 %d명 해서 각자 %.1f만 원입니다. %n", dividend, divisor, quotient);
    }
}

public class VariableExtraPractice {
    public static void main(String[] args) {
        int dividend;
        dividend = 10;

        int divisor;
        divisor = 7;

        double quotient = dividend/(double)divisor;

        System.out.printf("%d만 원 나누기 %d명 해서 각자 %.1f만 원입니다. %n", dividend, divisor, quotient);
    }
}

하마터면 10만 원 중 3만 원이 날아갈 뻔했다. 단번에 원하는 값을 출력하진 못했으나 어쨌든 해결했고, 겸사겸사 영어 단어도 몇 개 배웠으니 좋게 생각하련다.