[JAVA] 계산기 만들기

Chan·2023년 9월 12일
0

JAVA

목록 보기
4/6

오늘은 메서드에 대해 알아보고 간단히 계산기를 만들어보았다
메서드란 우리가 c언어에서 사용하는 함수와 같은 의미이다
java에서는 전부 메서드로 통일하고 사용하는 것 같다

대략적인 그림은 숫자를 입력받고 해당 숫자에 해당하는 사칙연산을 수행하는 프로그램을 만드는 것이다.
그런데 코드를 보면 showMenu() 이후 nextInt가 아니라 next().charat(0)을 받았다. 이건 혹여나 메뉴 입력받을 때 문자가 오는 것을 방지하기 위해 설정해준 코드이다.

  • 자바에서 문자를 입력하는 방법은 문자열로 입력받고 char로 바꿔야한다고 한다. 그래서 next()나 nextline() 뒤에 charat()을 붙이고 매개변수에 인덱스를 입력해주면 된다.
    ex) charat(0)이면 0번째 인덱스, charat(3)이면 3번째 인덱스

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.next().charAt(0);
			if(!checkNum(myChar)) {
				System.out.println("메뉴를 잘못 선택했습니다.");
				continue;
			}
			int num = myChar - '0';
			
			if(num == 0)break;
			if(num > 4) {
				System.out.println("메뉴를 잘못 선택했습니다. ");
				continue;
			}
			
			System.out.print("첫 번째 숫자:");
			int num1 = sc.nextInt();
			
			System.out.print("두 번째 숫자:");
			int num2 = sc.nextInt();
			
			if(num==1)addNum(num1,num2);
			else if(num==2)minusNum(num1,num2);
			else if(num==3)multiplyNum(num1,num2);
			else if(num==4)divideNum(num1,num2);
		}
		
		System.out.println("계산기를 종료합니다.");
	}
	
	public 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 minusNum(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;
	}
}

성공적으로 잘 수행했다
아, 그런데 C언어에서 겪어던 착오를 겪었다
c언어를 했을 때, 문자가 아닌 자료형을 입력받고, 문자나 문자열을 입력받으면
앞에서 입력받고 개행문자인 엔터(\n)가 문자 입력받을때의 배열로 들어가 버퍼가 발생하는 경우가 있어서 getchar()로 해결했던 경우가 있었다
이번에 자바 공부를 하면서도 이런 경우가 발생했었다
교안에서는, nextline().charat(0)을 입력하라했지만
그렇게 하니까 빨간 줄이 그어졌다.
그래서 찾아보니 c언어 상황과 같은 상황이었다
코드를 살펴보면 myChar를 next().charAt(0)으로 입력 받는다
이후, 숫자 두개를 입력받고 다시 next().charAt(0)를 수행하므로 성공적이다
근데 만약, myChar를 nextLine().charAt(0)으로 입력 받는다면?
첫 번째 사칙연산할 때 두 번째 숫자를 받을 때 문제가 발생한다
두 번째 숫자를 받고 엔터를 칠 때, 그 엔터가 nextLine()에 넘어가고,
nextLine()은 엔터로 작동하기에 엔터를 담고 버퍼가 걸린다
그래서 nextLine이 아니라 next로 입력을 받아주었다,
아니면 두 번째 nextInt()를 입력받고 sc.nextline()를 다음 줄에 입력해줘도 된다.
그러면 바로 엔터를 받고 버퍼에서 지우기 때문이다

이상 끝.

profile
💻

0개의 댓글