디지털 컨버전스/JAVA
[Java] 사칙연산 계산기, 예외처리, try-catch , 지역 변수, 난수
gimyeondong
2020. 2. 10. 08:56
- 사칙연산 계산기
- 예외 처리
- Checked Exception 빨간줄, 컴파일 단계에서 확인
- Unchecked Exception 실행 단계계에서 확인
- Try-Catch
- Exception e : 객체지향
- 경우의 수를 나눌 때 catch가 여러개 붙을 수 있음
- 변수의 Life cycle
- 지역 변수는 생성되고 그 지역이 끝날 때 사라진다.
import java.util.Scanner;
public class Quiz_02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = 0;
int control = 0;
while(true) {
System.out.println("***ATM 시뮬레이터***");
System.out.println("1. 잔액조회");
System.out.println("2. 입금하기");
System.out.println("3. 출금하기");
System.out.println("4. 종료하기");
try{
System.out.print(">> ");
control = Integer.parseInt(sc.nextLine());
}catch(Exception e){
System.out.println("숫자를 입력해주세요");
continue;//숫자를 입력해주세요와 입력번호 다시 확인이 동시출력 되지 않도록
//다음 반복으로 이동
}
if(control == 4) {
System.out.println("ATM 시뮬레이터를 종료합니다.");
System.exit(0);
}else if(control == 1 || control == 2 || control == 3){
// 여기에 스위치 구문 들어가도 구동은 똑같이 됨
}else{
System.out.println("입력 번호를 다시 확인해주세요.");
}
switch(control) {
case 1 :
System.out.println("현재 보유 잔액은 "+ num+" 입니다.");
break;
case 2 :
while(true) {
try {
System.out.println("얼마를 입금하시겠습니까?");
System.out.print(">> ");
int add = Integer.parseInt(sc.nextLine());
System.out.println("입금 후 잔액은 "+(num += add));
break;
}catch(Exception e) {
System.out.println("입금액은 숫자여야 합니다.");
}
}
break;
case 3 :
while(true) {
try {
System.out.println("얼마를 출금하시겠습니까?");
System.out.print(">> ");
int minus = Integer.parseInt(sc.nextLine());
if (minus<=num) {
System.out.println("출금 후 잔액은 "+(num -= minus));
} else {
System.out.println("잔액이 부족합니다.");
}
break;
}catch(Exception e) {
System.out.println("출금액은 숫자여야 합니다.");
}
}
break;
}
}
}
}
//atm 시뮬레이터
//오류시 메세지
//숫자 넣는 곳에 문자 들어갈시 예외처리
import java.util.Scanner;
public class Quiz_03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int account = 0;//초기화 되는 것을 막기 위해 while문 밖으로
while(true) {
System.out.println("=== ATM 시뮬레이터 ===");
System.out.println("1. 잔액조회");
System.out.println("2. 입금하기");
System.out.println("3. 출금하기");
System.out.println("4. 종료하기");
System.out.print(">> ");
String menu = sc.nextLine();// 문자 입력시 번거로움 막기 위해 String
if(menu.contentEquals("1")){
System.out.println("현재 잔액은 "+account+ " 원 입니다");
}else if(menu.contentEquals("2")) {
System.out.println("얼마를 입금하시겠습니까?");
while(true) {
try {
int input = Integer.parseInt(sc.nextLine());
System.out.println(input+ " 원이 입금되었습니다.");
account += input;
break;
}catch(Exception e){
System.out.println("입력값이 숫자가 아닙니다.");
e.printStackTrace();
}
}
}else if(menu.contentEquals("3")) {
System.out.println("얼마를 출금하시겠습니까?");
while(true) {
try {
int output = Integer.parseInt(sc.nextLine());
if(account >= output) {
System.out.println(output+ " 원이 출금되었습니다.");
account -= output;
}else {
System.out.println("잔액이 부족합니다.");
}
break;
}catch(Exception e){
System.out.println("입력값이 숫자가 아닙니다.");
e.printStackTrace();//빨간 메세지 뜨지만 계속 진행, 개발자를 위한 메세지
}
}
}else if(menu.contentEquals("4")) {
System.out.println("ATM 시뮬레이터를 종료합니다.");
System.exit(0);
}else {
System.out.println("메뉴를 확인해 주세요.");
}
}
}
}
- 난수 RandomNumber
- 임의의 값 또는 무작위로 만들어지는 알 수 없는 값
- 난수생성의 활용
- 주사위 게임, 포커게임 및 슈팅게임 등
- 난수 생성 Method
- Math 클래스 내부의 random() method
- 0~1.0 사이의 값을 무작위로 Return
- 원하는 난수 범위를 구하기 위해 적절한 연산과 형 변환이 필요
- Math.random()*(최대-최소+1)+최소
- RAM : 휘발성 메모리, 전력공급이 중단되면 데이터가 사라짐
- 하드디스크 : 반영구적, 자기디스크(자력)
- 난수를 생성하고 가공 할 수 있어야 한다.
public class Exam_03 {
public static void main(String[] args) {
// 0 ~ 9 사이 수 구하기
double d = Math.random();
int randNum = (int)(d*(9 - 0 + 1)+0);
System.out.println(randNum);
//난수를 가공할 수 있어야 한다.
//구하고자 하는 난수 범위의 최대값 y, 최소값x
//ran * (y-x+1) + x
//24~37 범위 -> ran(37-24+1)+24 -> (ran * 14)+24 -> (난수의 최소값 0 ~ 최대값13)+24
//cf. (int)d*(9-0+1)+0 : 연산 우선 순위를 고려하지 않으면 무조건 0이 나옴
// -> (int)(d*(9-0+1)+0)
}
}
public class Quiz_04 { //난수 범위 지정
public static void main(String[] args) {
double d1 = Math.random();
System.out.println("0~9까지의 랜덤 수 : "+(int)(d1*10));
double d2 = Math.random();
System.out.println("1~10까지의 랜덤 수 : "+((int)(d2*10)+1));
double d3 = Math.random();
System.out.println("20~35까지의 랜덤 수 : "+((int)(d3*16)+20));
double d4 = Math.random();
System.out.println("0또는 1 : "+(int)(d4*2));
}
}
//주사위 굴리기
public class Quiz_05 {
public static void main(String[] args) {
System.out.println("주사위 굴리기!");
double r1 = Math.random();
int d1 =(int)(r1*6+1);
System.out.println("첫 번째 주사위 : "+d1);
double r2 = Math.random();
int d2 =(int)(r2*6+1);
System.out.println("두 번째 주사위 : "+d2);
System.out.println("두 주사위의 합 : "+(d1+d2));
}
}
import java.util.Scanner;
//동전 앞 뒤 맞추기 풀이
public class Quiz_06 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
int com = (int)(Math.random() * 2 + 1); //난수 생성이 반복문 안에 오도록
System.out.println("===동전 앞 뒤 맞추기===");
System.out.print("숫자를 입력해주세요 (1.앞면/2.뒷면): ");
int player = Integer.parseInt(sc.nextLine());
if(com == player) {
System.out.println("맞췄습니다^^");
}else {
System.out.println("땡! 틀렸습니다.");
}
}
}
}
import java.util.Scanner;
//가위 바위 보 게임
public class Quiz_07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("===가위 바위 보 게임===");
while(true) {
int com = (int)(Math.random() * 3 + 1);
System.out.print("숫자를 선택하세요(1.가위/2.바위/3.보): ");
int player = Integer.parseInt(sc.nextLine());
if(player==1) {
System.out.println("당신은 가위를 냈습니다.");
switch(com) {
case 1 :
System.out.println("컴퓨터는 가위를 냈습니다.");
System.out.println("==================");
System.out.println("무승부");
break;
case 2 :
System.out.println("컴퓨터는 바위를 냈습니다.");
System.out.println("==================");
System.out.println("컴퓨터가 이겼습니다. ㅠㅠ");
break;
case 3 :
System.out.println("컴퓨터는 보를 냈습니다.");
System.out.println("==================");
System.out.println("당신이 이겼습니다!");
break;
}
}else if(player==2){
System.out.println("당신은 바위를 냈습니다.");
switch(com) {
case 1 :
System.out.println("컴퓨터는 가위를 냈습니다.");
System.out.println("==================");
System.out.println("당신이 이겼습니다!");
break;
case 2 :
System.out.println("컴퓨터는 바위를 냈습니다.");
System.out.println("==================");
System.out.println("무승부");
break;
case 3 :
System.out.println("컴퓨터는 보를 냈습니다.");
System.out.println("==================");
System.out.println("컴퓨터가 이겼습니다. ㅠㅠ");
break;
}
}else if(player==3){
System.out.println("당신은 보를 냈습니다.");
switch(com) {
case 1 :
System.out.println("컴퓨터는 가위를 냈습니다.");
System.out.println("==================");
System.out.println("컴퓨터가 이겼습니다. ㅠㅠ");
break;
case 2 :
System.out.println("컴퓨터는 바위를 냈습니다.");
System.out.println("==================");
System.out.println("당신이 이겼습니다!");
break;
case 3 :
System.out.println("컴퓨터는 보를 냈습니다.");
System.out.println("==================");
System.out.println("무승부");
break;
}
}
}
}
}
import java.util.Scanner;
//사칙연산 계산기 - 강사 코드입니다. 참조해주세요.
public class Quiz_08 {
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("/")){
System.out.println("연산자를 확인하세요.");
continue;
}
int num1;
int num2;
while(true) {
try {
System.out.print("첫 번째 수 : ");
num1 = Integer.parseInt(sc.nextLine());
break;
}catch(Exception e) {
System.out.println("입력된 값이 숫자가 아닙니다.");
}
}
while(true) {
try {
System.out.print("두 번째 수 : ");
num2 = Integer.parseInt(sc.nextLine());
break;
}catch(Exception e) {
System.out.println("입력된 값이 숫자가 아닙니다.");
}
}
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;
}
}
}
}
import java.util.Scanner;
//ATM Simulator - 강사 코드입니다. 참조해주세요.
public class Quiz_09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int account = 0;
while(true) {
System.out.println(" === ATM 시뮬레이터 ===");
System.out.println("1. 잔액조회");
System.out.println("2. 입금하기");
System.out.println("3. 출금하기");
System.out.println("4. 종료");
System.out.print(">> ");
String menu = sc.nextLine();
if(menu.contentEquals("1")) {
System.out.println("현재 잔액은 " + account + " 원 입니다.");
}else if(menu.contentEquals("2")) {
while(true) {
System.out.print("얼마를 입금하시겠습니까 ? ");
try {
int input = Integer.parseInt(sc.nextLine());
System.out.println(input + " 원이 입금되었습니다.");
account += input;
break;
}catch(Exception e) {
System.out.println("입력값이 숫자가 아닙니다.");
}
}
}else if(menu.contentEquals("3")) {
while(true) {
try {
System.out.print("얼마를 출금하시겠습니까 ? ");
int output = Integer.parseInt(sc.nextLine());
if(account >= output) {
System.out.println(output + " 원이 출금되었습니다.");
account-=output;
}else {
System.out.println("잔액이 부족합니다.");
}
break;
}catch(Exception e) {
System.out.println("입력 값이 숫자가 아닙니다.");
e.printStackTrace();
}
}
}else if(menu.contentEquals("4")) {
System.out.println("시스템을 종료합니다.");
System.exit(0);
}else {
System.out.println("메뉴를 다시 확인하세요.");
}
}
}
}
https://cafe.naver.com/hellolang 사칙연산 계산기 강사님 코드
https://cafe.naver.com/hellolang ATM 강사님 코드
- PPT 자료 59~63 슬라이드 까지 진도 나갔습니다.
- 계산기 풀이는 별다른 것은 없었는데, try-catch문에서 e.printStackTrace();를 넣어주면 프로그램을 실행시키면서도 왜 예외가 처리되었는지 알수 있다고 하셨습니다.
- 그 후에는 난수에 대해서 예제 풀이를 했습니다.
- 난수는 Math.random()*(범위의최대값-범위의최소값+1)+범위의최소값으로 범위를 지정할 수 있다는 것만 알면 문제풀이가 가능 합니다.
- 마지막 63슬라이드 가위바위보게임 예제는 숙제입니다.