계산기 만들기 Lv1

김채원·2025년 2월 26일
0

계산기 만들기

목록 보기
1/2

1.가이드

Lv 1. 클래스 없이 기본적인 연산을 수행할 수 있는 계산기 만들기

  • 양의 정수(0 포함)를 입력받기
    • Scanner를 사용하여 양의 정수 2개(0 포함)를 전달 받을 수 있습니다.
    • 양의 정수는 각각 하나씩 전달 받습니다.
    • 양의 정수는 적합한 타입으로 선언한 변수에 저장합니다.
    • 예시 코드
      public class App {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
      
              System.out.print("첫 번째 숫자를 입력하세요: ");
              // Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
      		    System.out.print("두 번째 숫자를 입력하세요: ");
              // Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
          }
      }
  • 사칙연산 기호(➕,➖,✖️,➗)를 입력받기
    • Scanner를 사용하여 사칙연산 기호를 전달 받을 수 있습니다.
    • 사칙연산 기호를 적합한 타입으로 선언한 변수에 저장합니다. (charAt(0))
    • 예시 코드
      public class App {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              ...
              System.out.print("사칙연산 기호를 입력하세요: ");
              // 사칙연산 기호를 적합한 타입으로 선언한 변수에 저장합니다. 
          }
      }
  • 위에서 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력하기
    • 키워드 : if switch
    • 사칙연산 기호에 맞는 연산자를 사용하여 연산을 진행합니다.
    • 입력받은 연산 기호를 구분하기 위해 제어문을 사용합니다. (예를 들면 if, switch)
    • 연산 오류가 발생할 경우 해당 오류에 대한 내용을 정제하여 출력합니다.
      • ex) “나눗셈 연산에서 분모(두번째 정수)에 0이 입력될 수 없습니다.“
      • 예시 코드
        public class App {
            public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                ...
                int result = 0;
                /* 제어문을 활용하여 위 요구사항을 만족할 수 있게 구현합니다.*/
                System.out.println("결과: " + result);
            }
        }
  • 반복문을 사용하되, 반복의 종료를 알려주는 “exit” 문자열을 입력하기 전까지 무한으로 계산을 진행할 수 있도록 소스 코드를 수정하기
    • 키워드 : 무한으로 반복, 수정하기 (처음부터 무한 반복하는 것이 아니라, 위 스텝별로 진행하며 수정)
      예시 코드
public class App {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        /* 반복문 사용 해서 연산을 반복 */
        ...
        System.out.println("결과: " + result);
        
        System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
        /* exit을 입력 받으면 반복 종료 */
    }
}

2.코드 짜기

Scanner scanner = new Scanner(System.in);
int result = 0;

사용자 입력을 받아줄 scanner와 계산의 결과값을 담아줄 변수 result 생성

while(true){

}

사용자가 exit를 입력할때까지 반복해서 계산할거기때문에 while(true) 사용

System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = scanner.nextInt();
if (num1 < 0) {
	System.out.println("잘못된 숫자입니다.");
	continue;
}

첫 번째 숫자를 입력받을 로직 생성
양의 정수만 받을거기 때문에 숫자가 0보다 작을때 잘못된 숫자임을 알려주고 다시 입력받을 로직 생성

System.out.print("두 번째 숫자를 입력하세요: ");
int num2 = scanner.nextInt();
if (num2 < 0) {
	System.out.println("잘못된 숫자입니다.");
	continue;
            }

이후 두 번째 숫자를 입력받을 로직도 생성

scanner.nextLine(); 

이후 사용자가 입력값을 입력할 때 enter가 입력되는걸 방지하기 위해 scanner.nextLine(); 추가

System.out.print("사칙 연산 기호를 입력하세요(+, -, *, /) : ");
char operator = scanner.next().charAt(0);

연산을 위한 기호를 입력받은 후 operator에 담아줌

if (operator == '+') {
	result = num1 + num2;
	} else if (operator == '-') {
		result = num1 - num2;
	} else if (operator == '*') {
		result = num1 * num2;
	} else if (operator == '/' && num2 != 0) {
		result = num1 / num2;
	} else {
		System.out.println("잘못된 계산입니다");
		continue;
	}
}

입력받은 기호에 따라 연산진행
나눗셈의 경우 0으로 나누는건 불가능하기 때문에 검증로직 추가
만약 입력이 정확하게 되지 않은 경우 다시 입력받기

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

연산 결과 반환

			System.out.print("더 계산하시겠습니까? (exit 입력 시 종료): ");
            String choice = scanner.nextLine();
            if (choice.toLowerCase().equals("exit")) {
                System.out.println("계산기를 종료합니다.");
                return;
            }

사용자에게 계산을 그만할지 물어보는 로직
대소문자 구분없이 동작하기 위해 toLowerCase 넣어줌

완성본

https://github.com/chaewon9999/Calculator/tree/master/src/level1

3.트러블 슈팅 및 느낀점

- 트러블슈팅

  • 숫자를 입력받을 때 엔터가 자동 입력되는 오류 발생
    => scanner.nextLine();을 통해 버퍼를 비워줌

- 느낀점

코드를 만드는거 자체는 어려움이 없었는데 내 맘대로 코드 짰다가 나중에 예시코드가 있다는걸 알고 수정하는게 가장 힘들었다 ,, 이래서 문제를 잘 읽어야하나부다

profile
김채원 판교간다

0개의 댓글