Daily coding
Java Basic : day 3 - Example 03 : 계산기 ( 입력값 검사 및 예외처리) 본문
Language/Java_basic
Java Basic : day 3 - Example 03 : 계산기 ( 입력값 검사 및 예외처리)
sunnnkim 2019. 11. 20. 19:26package 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();
}
}
'Language > Java_basic' 카테고리의 다른 글
Java Basic : day 4 - 래퍼 클래스(Wrapper Class) (0) | 2019.11.22 |
---|---|
Java Basic : day 4 - 피보나치 수열 (Fibonacci sequence) (0) | 2019.11.22 |
Java Basic : day 3 - Example 02 : 2차원 배열을 1차원 배열에 넣기 (0) | 2019.11.20 |
Java Basic : day 3 - Example 01 : 최대값, 최소값 찾기 (Max / Min) (0) | 2019.11.20 |
Java Basic : day 3 - 2차원 배열 (0) | 2019.11.20 |