[Must Have Java][Chapter 08] 계산기 만들기(선수 수업 업그레이드)

허다람·2024년 5월 29일
post-thumbnail

[Must Have] 이재환의 자바 프로그래밍 입문 책을 읽고 정리한 글입니다.

💡 학습 목표
지금까지 배운 모든 내용을 적용해서 계산기 만드는 프로그램을 만들어보자.

1. 메뉴 만들기

클래스를 하나 만들어 선택할 수 있는 메뉴를 보여주는 기능을 메서드로 만들어준다.

import java.util.Scanner;

public class MyCalculator {

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

	private static void showMenu() {
		System.out.println("메뉴를 선택하세요.");
		System.out.println("1. 더하기");
		System.out.println("2. 빼기");
		System.out.println("3. 곱하기");
		System.out.println("4. 나누기");
		System.out.println("0. 끝내기");
	}

}

2. 메뉴 출력 및 사용자 입력

while문을 이용하여 메뉴가 계속해서 출력되어 사용자 입력을 처리할 수 있도록 만들어준다.

while(true) {
			showMenu();
			
			int num = sc.nextInt();
			if(num == 0) { // 입력받은 값이 0이면 반복문 종료
				break;
			}
			else { 
            // 입력받은 값이 0이 아닐때 실행
				if(num > 4) { // 메뉴에 없는 다른 번호 입력시 실행
					System.out.println("잘못된 메뉴를 선택했습니다.");
					continue;
				}
			}
		}
		System.out.println("===계산기를 종료합니다.===");

사칙연산 메뉴 선택

없는 메뉴 선책

종료 메뉴 선택

3. 연산 기능 만들기

메뉴 기능을 메서드로 만들어 추가한다.

public static void showMenu()
{...}
public static void addNum(int num1, int num2) {
	int result = num1 + num2;
	System.out.println(num1 + " + " + num2 + " = " + result);
}

public static void numsNum(int num1, int num2) {
	int result = num1 - num2;
	System.out.println(num1 + " - " + num2 + " = " + result);
}
	
public static void multipyNum(int num1, int num2) {
	int result = num1 * num2;
	System.out.println(num1 + " * " + num2 + " = " + result);
}
	
public static void divideNum(int num1, int num2) {
	int result1 = num1 / num2;
	System.out.println(num1 + " / " + num2 + " = " + result1);
		
	int result2 = num1 % num2;
	System.out.println(num1 + " % " + num2 + " = " + result2);
}

4. 선택 메뉴 실행하기

System.out.println("첫 번째 숫자 : ");
int num1 = sc.nextInt();

System.out.println("두 번째 숫자 : ");
int num2 = sc.nextInt();
				
if(num == 1)
	addNum(num1, num2);
else if(num == 2)
	minsNum(num1, num2);
else if(num == 3)
	multiplyNum(num1, num2);
else if(num == 4)
	divideNum(num1, num2);

5. 유효성 검사

사용자의 입력이 숫자가 아닐 경우를 체크해본다. checkNum()메서드를 코드 맨 뒤에 추가한다.

public static boolean checkNum(char ch)
	{
		if(ch >= '0' && ch <= '9') {
			return true;
		}
		else {
			return false;
		}
	}

char형 데이터를 매개변수로 받아 숫자 0에서 9 사이의 값인지 확인하고 숫자라면 true를 반환, 숫자가 아니면 false를 반환한다.

입력받는 부분을 수정한 총 코드이다.

package Chapter08;

import java.util.Scanner;

public class MyCalculator {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		while(true) {
			showMenu();
			
			char myChar = sc.nextLine().charAt(0);
			if(!checkNum(myChar)) {
				System.out.println("메뉴를 잘못 선택했습니다.");
				continue;
			}
			
			int num = myChar - '0';
			System.out.println(num);
			
			if(num == 0) {
				break;
			}
			else {
				if(num > 4) {
					System.out.println("잘못된 메뉴를 선택했습니다.");
					continue;
				}
				
				System.out.println("첫 번째 숫자 : ");
				int num1 = sc.nextInt();
				
				System.out.println("두 번째 숫자 : ");
				int num2 = sc.nextInt();
				
				if(num == 1)
					addNum(num1, num2);
				else if(num == 2)
					minsNum(num1, num2);
				else if(num == 3)
					multiplyNum(num1, num2);
				else if(num == 4)
					divideNum(num1, num2);
			}
		}
		System.out.println("===계산기를 종료합니다.===");
		sc.close();
	}

	private static void showMenu() {
		System.out.println("메뉴를 선택하세요.");
		System.out.println("1. 더하기");
		System.out.println("2. 빼기");
		System.out.println("3. 곱하기");
		System.out.println("4. 나누기");
		System.out.println("0. 끝내기");
	}
	
	public static void addNum(int num1, int num2) {
		int result = num1 + num2;
		System.out.println(num1 + " + " + num2 + " = " + result);
	}

	public static void minsNum(int num1, int num2) {
		int result = num1 - num2;
		System.out.println(num1 + " - " + num2 + " = " + result);
	}
	
	public static void multiplyNum(int num1, int num2) {
		int result = num1 * num2;
		System.out.println(num1 + " * " + num2 + " = " + result);
	}
	
	public static void divideNum(int num1, int num2) {
		int result1 = num1 / num2;
		System.out.println(num1 + " / " + num2 + " = " + result1);
		
		int result2 = num1 % num2;
		System.out.println(num1 + " % " + num2 + " = " + result2);
	}
	
	public static boolean checkNum(char ch)
	{
		if(ch >= '0' && ch <= '9') {
			return true;
		}
		else {
			return false;
		}
	}
}
profile
나 java봐라

0개의 댓글