Daily coding

Java Basic : day 3 - Example 03 : 계산기 ( 입력값 검사 및 예외처리) 본문

Language/Java_basic

Java Basic : day 3 - Example 03 : 계산기 ( 입력값 검사 및 예외처리)

sunnnkim 2019. 11. 20. 19:26
package day3;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Ex03 {

	public static void main(String[] args) {

		// Ex 03
		// 두개의 수를 입력받고 계산결과를 출력
		// 문자 포함되었는지 조사하고 문자 입력받으면 재입력.
		// (+, -, *, /) 입력 받고 , 해당 연산자가 입력이 안되어있으면 재입력 받기

		Scanner sc = new Scanner(System.in);

		// 나의 풀이 : try - catch 예외처리
		int num1 = 0;
		int num2 = 0;
		String op;
		int result;

		// 숫자입력 1 (숫자 데이터만 받기)
		while (true) {
			try {
				System.out.print("첫번째 수를 입력 :");
				num1 = sc.nextInt();
				sc.nextLine();
				break;
			} catch (InputMismatchException e) {
				// sc = new Scanner(System.in);
				// 예외가 발생하면 스캐너를 다시 초기화 해주거나 nextLine()을 실행하여
				// 스캐너에 값을 비워줘야한다.
				sc.nextLine();
				System.out.println("잘못 입력했습니다.");
			}

		}

		// 연산자 입력받기
		while (true) {
			System.out.println("연산자 입력 ( +, -, *, / 만 가능)");
			System.out.print(">> ");
			op = sc.next().trim();
			if (op.equals("+") || op.equals("-") || op.equals("*") || op.equals("/")) {
				break;
			} else {
				System.out.println("잘못입력했습니다.");
			}

		}

		// num2 입력받기

		while (true) {
			try {
				System.out.print("두번째 수를 입력 :");
				num2 = sc.nextInt();
				sc.nextLine();
				break;
			} catch (InputMismatchException e) {
				// sc = new Scanner(System.in);
				// 예외가 발생하면 스캐너를 다시 초기화 해주거나 nextLine()을 실행하여
				// 스캐너에 값을 비워줘야한다.
				sc.nextLine();
				System.out.println("잘못 입력했습니다");
			}
		}

		// 연산 및 출력
		double divide; // 나누기는 double 변수로 결과 출력하기
		if (op.equals("+")) {
			result = num1 + num2;
			System.out.println(num1 + " " + op + " " + num2 + " = " + result);
		} else if (op.equals("-")) {
			result = num1 - num2;
			System.out.println(num1 + " " + op + " " + num2 + " = " + result);
		} else if (op.equals("*")) {
			result = num1 * num2;
			System.out.println(num1 + " " + op + " " + num2 + " = " + result);
		} else if (op.equals("/")) {
			divide = (double) num1 / num2;
			System.out.println(num1 + " " + op + " " + num2 + " = " + divide);
		}

		// 강사님 풀이 : ASCII Code 값으로 범위 지정

		String num11 = "", num22 = "";
		String oper = "";
		int result2 = 0;
		boolean stop = true;

		while (stop) {
			System.out.println("첫번째 수  : ");
			num11 = sc.next();

			// 문자 포함되어 있는 지 조사하기
			for (int i = 0; i < num11.length(); i++) {
				char c = num11.charAt(i);
				int ascCode = (int) c;
				if (ascCode < 48 || ascCode > 57) { 
					// 48 : 0, 57: 9 사이의 아스키코드값이 아니면 다른 문자열임
					// 구글에 ASCII Code 참조하면 됨
					stop = false;
				}
			}
			if (stop == false) {
				System.out.println("숫자가 아닙니다. 다시 입력하시오.");
				stop = true;
				continue;
			}
			break;
		}

		while (true) {
			System.out.println("연산자 입력 ( +, -, *, / 만 가능)");
			System.out.print(">> ");
			oper = sc.next();
			if (oper.equals("+") || oper.equals("-") || oper.equals("*") || oper.equals("/")) {
				break;
			} else {
				System.out.println("잘못입력하셨습니다.");
			}

		}

		// 2번째 수 입력 받기

		while (stop) {
			System.out.println("두번째 수  : ");
			num22 = sc.next();

			// 문자 포함되어 있는 지 조사하기
			for (int i = 0; i < num22.length(); i++) {
				char c = num22.charAt(i);
				int ascCode = (int) c;
				if (ascCode < 48 || ascCode > 57) { // 48 : 0, 57: 9 사이의 아스키코드값이 아니면 다른 문자열
					stop = false;
				}
			}
			if (stop == false) {
				System.out.println("숫자가 아닙니다. 다시 입력하시오.");
				stop = true;
				continue;
			}
			break;
		}

		// 연산하기
		double dResult; // 나누기는 double 변수로 결과 출력하기
		if (oper.equals("+")) {
			result2 = Integer.valueOf(num11) + Integer.valueOf(num22);
			System.out.println(num11 + " + " + num22 + " = " + result2);
		} else if (oper.equals("-")) {
			result2 = Integer.valueOf(num11) - Integer.valueOf(num22);
			System.out.println(num11 + " - " + num22 + " = " + result2);
		} else if (oper.equals("*")) {
			result2 = Integer.valueOf(num11) * Integer.valueOf(num22);
			System.out.println(num11 + " * " + num22 + " = " + result2);
		} else if (oper.equals("/")) {
			dResult = Integer.valueOf(num11) / Double.valueOf(num22);
			System.out.println(num11 + " / " + num22 + " = " + dResult);
		}

		sc.close();

	}
}