본문 바로가기

Language/JAVA

[JAVA] 간단한 console 프로젝트 정수 계산기 프로그램 만들기 with IntelliJ

JAVA 간단한 console 정수 계산기 프로그램 만들기 with IntelliJ

 

자바 간단한 프로젝트 console로 동작하는 정수 계산기 프로그램을 만들어보겠습니다.

 

💡확인하기
  • OS : Windows 11
  • JDK : 17
  • IDE : IntelliJ

 


 

정수 2개와 연산자를 입력받아 계산 결과를 출력해 주는 프로그램을 작성해 봅시다.

 

요구사항

  • 정수 2개와 연산자를 사용자에게 입력받습니다.
  • 연산자는 +(덧셈), -(뺄셈), *(곱셈), /(나눗셈)만 입력받아야 합니다.
  • 정수나 연산자에 해당하는 문자가 아닌 다른 문자를 입력하면 올바른 값을 입력받을 때까지 반복해서 입력받습니다.
  • 사용자가 끝내길 원할 때까지 전체 프로그램을 반복합니다.

 

👇👇 전체 소스는 하단에서 👇👇

 


 

구현하기

입력받는 데이터를 저장할 변수를 생성합니다.

int num1, num2;	// 연산할 정수 2개
char op;	// 연산자 문자

 

사용자 입력을 처리할 Scanner를 생성합니다.

Scanner scan = new Scanner(System.in);

 

1. 첫 번째 값 입력받기

첫번째 정수를 입력받습니다.

System.out.print("1. 정수를 입력하세요 > ");
num1 = Integer.parseInt(scan.nextLine());

입력받은 값이 정수가 아니면 Integer.parseInt()NumberFormatException 에러가 발생하게 됩니다.

NumberFormatException 에러가 발생한다면 우리는 사용자가 입력한 값이 정수가 아닌 다른 문자라는 것을 알 수 있죠.

프로그램에서 에러 발생 시 예상치 못한 종료를 방지하기 위해 try-catch로 에러 핸들링하며 정상적인 값을 입력하도록 유도합니다.

try {
    num1 = Integer.parseInt(scan.nextLine());
} catch (Exception e) {
    System.out.print("\t정수만 입력하세요 > ");
}

 

정상적인 값을 입력받을 때까지 반복해서 입력받도록 무한 반복문으로 감싸고, 정상 동작시 break 키워드로 무한 반복문을 빠져나갑니다.

// 숫자1 입력
System.out.print("1. 정수를 입력하세요 > ");
while (true) {
    try {
        num1 = Integer.parseInt(scan.nextLine());
        break;
    } catch (Exception e) {
        System.out.print("\t정수만 입력하세요 > ");
    }
}

 

2. 두 번째 값 입력받기

연산자 문자를 입력받습니다.

System.out.print("2. 연산자를 입력하세요(+, -, *, /) > ");
op = scan.nextLine().toCharArray()[0];

입력받은 문자가 허용된 연산자 문자인지 확인합니다.

if (op == '+' || op == '-' || op == '*' || op == '/') {
    // 정상
}

 

무한 반복문으로 감싸 정상적인 입력값을 받을 때까지 반복하여 다시 입력받습니다.

// 연산자 입력
System.out.print("2. 연산자를 입력하세요(+, -, *, /) > ");
while (true) {
    op = scan.nextLine().toCharArray()[0];
    if (op == '+' || op == '-' || op == '*' || op == '/') {
        break;
    }
    System.out.print("\t+, -, *, / 중 하나를 입력하세요 > ");
}

 

3. 세 번째 값 입력받기

두 번째 정수를 입력받습니다.

System.out.print("3. 정수를 입력하세요 > ");
num2 = Integer.parseInt(scan.nextLine());

첫 번째 정수와 마찬가지로 정수가 아닌 값을 입력했다면 정상적인 값을 입력받도록 무한 반복문 처리합니다.

while (true) {
    try {
        num2 = Integer.parseInt(scan.nextLine());
        break;
    } catch (NumberFormatException e1) {
        System.out.print("\t정수만 입력하세요 > ");
    }
}

나눗셈 연산자를 입력한 경우, 나누는 숫자(분모)가 0이 된다면 ArithmeticException 에러가 발생합니다.

따라서, 나눗셈 연산자를 입력하고 두 번째 정수가 0이라면 강제로 에러를 발생시키고, catch 문에서 핸들링합니다.

if (op == '/' && num2 == 0) {
    throw new Exception("0으로 나눌 수 없습니다.");
}
catch(Exception e2) {
    System.out.print("\t" + e2.getMessage() + " 다시 입력하세요 > ");
}

 

4. 결과 계산 및 출력하기

연산에 필요한 값은 모두 입력받았습니다.

사용자에게 출력할 연산 결과를 저장하는 변수를 생성합니다.

int result = 0;

연산자 문자 종류에 따라 계산하기 위해 switch-case 문을 사용합니다.

switch (op) {
    case '+':
        result = num1 + num2;
        break;
    case '-':
        result = num1 - num2;
        break;
    case '*':
        result = num1 * num2;
        break;
    case '/':
        result = num1 / num2;
        break;
}

결과를 출력합니다.

System.out.println("## 결과 : " + result);

 

5. 종료하기

사용자가 프로그램 종료를 원할 때까지 반복해서 실행하므로 전체를 무한 반복문으로 감싸줍니다.

while (true) {
    int num1, num2;
    char op;

    // 숫자1 입력
    // 생략

    // 연산자 입력
    // 생략

    // 숫자2 입력
    // 생략

    // 연산자에 따라 계산
    // 생략

    System.out.println("## 결과 : " + result);

}   // END while

사용자에게 프로그램 진행 여부를 입력받습니다.

System.out.print("계속 하시겠습니까? 끝내려면 'Q'를 입력하세요. > ");
String quite = scan.nextLine();

종료 flag는 Q가 아닌 원하는 문자 또는 문자열로 설정해도 됩니다.

입력받은 문자열이 종료 flag라면 무한 반복문을 빠져나갑니다.

if (quite.equals("Q")) {
    System.out.println("============== 계산기 종료 ==============");
    break;
}

 

실행결과

JAVA 간단한 console 정수 계산기 프로그램 실행 결과

 


반응형

 

전체 소스 보기

더보기
public static void main(String[] args) {

    // 사용자 입력받는 Scanner 생성
    Scanner scan = new Scanner(System.in);

    System.out.println("============== 정수 계산기 ==============");

    while (true) {
        int num1, num2;
        char op;

        // 숫자1 입력
        System.out.print("1. 정수를 입력하세요 > ");
        while (true) {
            try {
                num1 = Integer.parseInt(scan.nextLine());
                break;
            } catch (Exception e) {
                System.out.print("\t정수만 입력하세요 > ");
            }
        }

        // 연산자 입력
        System.out.print("2. 연산자를 입력하세요(+, -, *, /) > ");
        while (true) {
            op = scan.nextLine().toCharArray()[0];
            if (op == '+' || op == '-' || op == '*' || op == '/') {
                break;
            }
            System.out.print("\t+, -, *, / 중 하나를 입력하세요 > ");
        }

        // 숫자2 입력
        System.out.print("3. 정수를 입력하세요 > ");
        while (true) {
            try {
                num2 = Integer.parseInt(scan.nextLine());

                // 나눗셈인데 분모가 0일 경우 강제 에러 트리거
                if (op == '/' && num2 == 0) {
                    throw new Exception("0으로 나눌 수 없습니다.");
                }
                break;
            } catch (NumberFormatException e1) {
                System.out.print("\t정수만 입력하세요 > ");
            } catch(Exception e2) {
                System.out.print("\t" + e2.getMessage() + " 다시 입력하세요 > ");
            }
        }

        // 연산자에 따라 계산
        int result = 0;
        switch (op) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                result = num1 / num2;
                break;
        }

        System.out.println("## 결과 : " + result);

        System.out.print("계속 하시겠습니까? 끝내려면 'Q'를 입력하세요. > ");
        String quite = scan.nextLine();
        if (quite.equals("Q")) {
            System.out.println("============== 계산기 종료 ==============");
            break;
        }
    }   // END while

}   // END main

 

728x90