//계산기 프로그램
/*
이전에 만들었던 계산기...
숫자 입력받을 때.....
입력 받은 것이 숫자인 것을 검증 받으려고 할때
main안에서 try-catch를 쓰면 너무 많은 while과 try-catch가 들어감...
숫자를 입력받고 try-catch하는 부분을 method로 만들면
main에서 숫자를 입력받을때 method call만 쓰면 되니까 코드줄이 짧아진다.
*/
import java.util.Scanner;
public class Quiz_07 {
public static int inputNumber(String msg, String err) { //인자값을 하나 더 추가해서 err메세지를 받으면
Scanner sc = new Scanner(System.in);
int num=0;
while(true) {
try {
System.out.println(msg);
//System.out.print("첫번째 수 : ");
num = Integer.parseInt(sc.nextLine());
break;
}catch(Exception e) {
//System.out.println("숫자값이 아닙니다.");
System.out.println(err); //err메세지도 입력하는 부분마다 다르게 주게 하면 다양한 입력 부분에서 이 메소드가 사용이 가능할 것!!!!!!!!!!!!
//continue;
}
}
return num;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("=== 계산기 프로그램 ====");
while(true) {
System.out.print("연산자 입력 (+,-,*,/) : ");
String oper = sc.nextLine();
if(oper.contentEquals("q")) {
System.out.println("계산기 프로그램을 종료합니다.");
System.exit(0);
}else if(oper.contentEquals("+") ||
oper.contentEquals("-") ||
oper.contentEquals("*") ||
oper.contentEquals("/")) {
int num1=inputNumber("첫번째 수 : ","숫자가 아닙니다");
int num2=inputNumber("두번째 수 : ","숫자가 아니라고");
System.out.println("=== 결 과 ===");
switch(oper) {
case "+" :
System.out.println(num1 + "+" + num2+ "=" + (num1+num2));
break;
case "-" :
System.out.println(num1 + "-" + num2+ "=" + (num1-num2));
break;
case "*" :
System.out.println(num1 + "*" + num2+ "=" + (num1*num2));
break;
case "/" :
System.out.println(num1 + "/" + num2+ "=" + (num1/(double)num2));
break;
/*
* switch에 q에 대한 종료기능을 넣으면,
* 연산자에 q를 넣어도 switch문 위에 있는 첫번째,두번째 숫자를 입력하고 끝나기 때문에
* 논리적으로는 문제가 없는 로직이지만, 상식적으로 연산자 입력을 받고, 숫자를 입력받기 전에 종료가 되야하기 때문에
* 종료에 적절한 시점의 라인에 연산자 입력 q에 대한 실행문코드를 입력해야한다.
case "q":
System.out.println("계산기 프로그램을 좋료합니다.");
break; // switch를 나가는 목적으로 사용되어서 전체 프로그램 종료는 불가함.
System.quit(0) // 어느 시점에서건 프로그램 종료해주는 문구
*/
}
}else {
System.out.println("연산자를 확인하세요.");
}
}
}
}
Comment