[Section 1] 계산기

JEREGIM·2023년 2월 23일
0

📌소스 코드

package string;

import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {

        /*사용자의 입력으로 첫 번째 숫자, 연산자, 두 번째 숫자를 받아야 합니다.
         *연산자의 종류는 +, -, *, / 네 가지 입니다.
         *연산자의 종류에 따라 조건을 분기합니다.
         *소수점 연산을 수행할 수 있어야 합니다.
         *연산 결과를 콘솔에 출력합니다.*/

        // 연산자를 먼저 받고 연산자 받을때 종료 조건 추가, 연산자 안내문 출력
        Scanner sc = new Scanner(System.in);
        double result = 0.0;

        while (true) {
            operatorNotice(); // 연산자 안내문 메서드 호출
            System.out.print("연산자 입력 : ");
            String opStr = sc.next();
            char op = opStr.charAt(0);
            if (op == 'q' || op == 'Q') // q, Q를 누르면 프로그램 종료
                System.exit(1);
            // '+,-,*,/' 외에 문자 입력하면 다시 입력하라는 안내문 출력
            else if (!(op == '+' || op == '-' || op == '*' || op == '/')) {
                System.out.println("연산자를 잘못 입력하셨습니다. 다시 입력해주세요.");
                continue;
            }
            System.out.println("첫 번째 숫자를 입력하세요.");
            System.out.print("첫 번째 숫자 입력 : ");
            double num1 = sc.nextDouble();
            System.out.println("두 번째 숫자를 입력하세요.");
            System.out.print("두 번째 숫자 입력 : ");
            double num2 = sc.nextDouble();

            switch (op) {
                case '+':
                    result = add(num1, num2);
                    break;
                case '-':
                    result = sub(num1, num2);
                    break;
                case '*':
                    result = multiply(num1, num2);
                    break;
                case '/':
                    result = divide(num1, num2);
                    break;
            }

            System.out.printf("결과 : %f %s %f = %f%n%n", num1, op, num2, result);
        }
    }

    // 연산자 안내문 출력 메서드
    public static void operatorNotice() {
        System.out.println("===Java Calculator===");
        System.out.println("연산자를 먼저 입력하세요.");
        System.out.println("'+' : 덧셈");
        System.out.println("'-' : 뺄셈");
        System.out.println("'*' : 곱셈");
        System.out.println("'/' : 나눗셈");
        System.out.println("'q' : 프로그램을 종료하려면 q를 누르세요.");
    }

    // 연산자 수행 메서드
    public static double add(double num1, double num2) {
        return num1 + num2;
    }

    public static double sub(double num1, double num2) {
        return num1 - num2;
    }

    public static double multiply(double num1, double num2) {
        return num1 * num2;
    }

    public static double divide(double num1, double num2) {
        return num1 / num2;
    }
}

📌실행 예시

소수점 계산

연산자를 잘못 입력했을 때

프로그램 종료


📌오류 및 해결

오류 : 처음 계산하고 다음 계산을 실행 시 발생하는 오류

원인 및 해결

String opStr = sc.nextLine();
char op = opStr.charAt(0);

원인

nextLine()은 한 줄 단위로 입력을 받기 때문에 입력 받은 문자열과 개행문자(Enter)를 모두 가져온다. 처음 charAt(0)으로 연산자를 가져올땐 아무 문제가 없지만 다음 while문을 반복할 때는 버퍼에 개행문자가 남겨져 있기 때문에 charAt(0)이 개행문자를 인식하여 다시 동작하면 오류가 나는 것이다.

String opStr = sc.next();
char op = opStr.charAt(0);

해결

next()는 입력 받은 문자열과 개행문자(Enter)를 분리해서 문자열만 가져오기 때문에 charAt(0)을 했을 때 입력 받은 문자열인(+,-,*,/) 중 하나를 인식할 수 있게 된다.

0개의 댓글