Java /day05 / 23.08.29(화) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 8월 29일
post-thumbnail

ch05_switch


SwitchEx01

switch 문

switch() { 
case 상수값 : 
	실행 코드
	break; <- switch 종료
	.....
case: 
	실행 코드
	break;
default : 
	실행 코드
}

switch 문 안의 값과 정확하게 일치하는 case 값을 찾아서 해당 지역의 코드를 실행

  • switch : 정수, 문자, 문자열
  • case : 상수만 사용 가능 ( 변수 x )
  • 하나의 case 가 끝나는 마지막에는 'break;'문을 사용해서 종료
  • default : 매칭되는 case 값이 없을 때 실행 할 코드가 있으면 사용 (필수 아님)
int no = 4;
System.out.println("no : " + no);
System.out.println();

switch (no) {
case 1:
	System.out.println("1 - one");
	break;
case 2:
	System.out.println("2 - two");
	break;
case 3:
	System.out.println("3 - three");
	break;
default:
	System.out.println("?");
}


SwitchEx02

  • 케이스 다른데 실행되는 값이 같으면 break를 없애고 아래 java 처럼 작성 가능
  • switch 가 if 보다 실행 속도가 더 빠름
System.out.println("Java : j , Python : p >> ");
char subject = sc.next().charAt(0);

switch(subject) {
case 'j':
case 'J':
	System.out.println("Java 선택");
	break;
case 'p':
	System.out.println("Python 선택");
	break;
case 'P':
	System.out.println("Python 선택");
	break;
default :
	System.out.println("없는 과목임");
}


SwitchEx03

  • if else if 사용해도 됨
String member = "vip";
int dc = 0;
	
switch(member) {
case "vip" :
	dc = 20;
	break;
case "gold" :
	dc = 10;
	break;
case "일반" :
	dc = 5;
	break;
}
System.out.println("회원 등급 : " + member);
System.out.println("할인 : " + dc);
		
dc = 0;
if(member.equals("vip")) 
	dc = 20;
else if(member.equals("gold")) 
	dc = 10;
else if(member.equals("일반")) 
	dc = 5;
System.out.println("회원 등급 : " + member);
System.out.println("할인 : " + dc);


QuizSwitch

#1

버스 단말기 코드를 작성하세요

  • 요금 : 일반(1500), 학생(920)
  • 버스 카드 잔액, 사용 카드(일반, 학생)을 설정
  • 일반, 학생 카드인지를 확인해서, 정상이면 차감된 금액 출력
  • Ex) 잔액 : 2000 원
    일반, 학생 > 일반
    삑! 잔액 : 500 원

내 코드

int m = 2000;
System.out.print("사용 카드 입력 : ");
String card = sc.next();
System.out.println("--- 버스 단말기 코드 ---");
switch(card) {
case "일반" :
	System.out.println("잔액 : " + m + " 원");
	System.out.println("일반, 학생 > " + card);
	System.out.println("삑! 잔액 : "+ (m-1500) + " 원");
	break;
case "학생" :
	System.out.println("잔액 : " + m + " 원");
	System.out.println("일반, 학생 > " + card);
	System.out.println("삑! 잔액 : "+ (m-920) + " 원");
}

강사님 코드

int money = 1000;
System.out.println("잔액 : " + money + " 원");
	      
System.out.print("일반, 학생 >> ");
String card = sc.next();
	      	      
int general = 1500; // 일반
int student = 920;  // 학생
boolean check = true; // 진행 확인( true : 정상, false : 오류 )
	      
switch(card) {
case "일반":
	if(money >= general) {
		money -= general;
	} else {
		System.out.println("잔액이 부족합니다..");
	check = false;
	}
	break;
case "학생":
	if(money >= student) {
		money -= student;
	} else {
		System.out.println("잔액이 부족합니다..");
		check = false;
	}
	break;
} // switch() end
if(check) {
	System.out.println("삑! 잔액 : " + money + " 원");
}

#2

간단한 사칙연산 계산기 코드를 작성하세요

  • Ex) + , - , , / 선택 >>
    첫번째 숫자 입력 > 12
    두번째 숫자 입력 > 2
    12 * 2 = 24

내 코드

System.out.println("사칙연산 선택 \n" + "+, -, *, / : ");
char c = sc.next().charAt(0);
if (c == '+' || c == '-' || c == '*' || c == '/') {
	System.out.println("첫번째 숫자 입력 : ");
	int n1 = sc.nextInt();
	System.out.println("두번째 숫자 입력 : ");
	int n2 = sc.nextInt();
	switch (c) {
	case '+':
		System.out.println(n1 + " + " + n2 + " = " + (n1 + n2));
		break;
	case '-':
		System.out.println(n1 + " - " + n2 + " = " + (n1 - n2));
		break;
	case '*':
		System.out.println(n1 + " * " + n2 + " = " + (n1 * n2));
		break;
	case '/':
		System.out.println(n1 + " / " + n2 + " = " + (n1 / n2));
		break;
	}
} else {
	System.out.println("잘 못 입력");
}

내 코드 문제점

  • 셈을 했을 때 분모에 0 이 들어갈 수 있음
    -> 예외 발생

강사님 코드

char opt = ' '; // 연산자
int dataA = 0; // 데이터
int dataB = 0;
double res = 0;// 결과
boolean run = true; // 진행 확인

System.out.println("+ , - , * , / 선택 >> ");
opt = sc.next().charAt(0);

if (opt == '+' || opt == '-' || opt == '*' || opt == '/') {

	System.out.println("첫번째 숫자 입력 > ");
	dataA = sc.nextInt();
	System.out.println("두번째 숫자 입력 > ");
	dataB = sc.nextInt();

	switch (opt) {
	case '+':
		res = dataA + dataB;
		break;
	case '-':
		res = dataA - dataB;
		break;
	case '*':
		res = dataA * dataB;
		break;
	case '/':
		if (dataB > 0) {
			res = (double) dataA / dataB;
		} else {
			run = false;
		}
		break;
	}
	if (run) {
		System.out.println(dataA + " " + opt + " " + dataB + " = " + res);
	} else {
		System.out.println("계산 오류");
	}
} else {
	System.out.println("연산자 선택 오류");
}

#3

월을 입력받아서 해당 월이 몇일까지 있는지를 알려주는 코드를 작성

  • 단, 2월은 "28일 or 29일" 출력으로 처리
  • Ex)
    월 입력 > 3
    31일

내 코드

System.out.println("월 입력 >> ");
int month = sc.nextInt();
String d30 = "30일 까지 있습니다.";
String d28 = "28일 또는 29일 까지 있습니다.";
String d31 = "31일 까지 있습니다.";
		
if(month >0 && month <=12) {
	switch(month) {
	case 1 :
	case 3 :
	case 5 :
	case 7 :
	case 8 :
	case 10 :
	case 12 :
		System.out.println(month + "월은 " + d31);
		break;
	case 2 :
		System.out.println(month + 월은 " + d28);
		break;
	default : 
		System.out.println(month + 월은 " + d30);
	}
} else{
	System.out.println("잘 못 입력");
}

강사님 코드

System.out.println("월 입력 > ");
int month = sc.nextInt();
		
String day = "31일";
if(month >=1 && month <=12) {
	switch(month) {
	case 4:
	case 6:
	case 9:
	case 11:
		day = "30일";
		break;
	case 2:
		day = "28일 or 29일";
		break;
	}
	System.out.println(day);
} else {
	System.out.println("월 오류");
}


ch06_for


ForEx01

for 문

for ( 초기식 ; 조건식 ; 증감식 ) {
	실행 코드
}
  • 초기식 : 반복 횟수를 카운트 하는 변수의 선언(생성)과 초기값 설정
    for 문 실행과 동시에 최초 한 번 만 실행
  • 조건식 : 반복문 실행 확인
  • 증감식 : 반복 횟수를 카운트하는 변수의 값을 증가 or 감소
// 1		  2     4    <- 실행 순서
for(int i=0 ; i<3 ; i++) {
	// 3

	System.out.println(i);
}
// 1(한 번 만 실행)	-> 2(참) -> 3 -> 4
// 					-> 2(참) -> 3 -> 4
// 					-> 2(참) -> 3 -> 4
// 					-> 2(거짓) -> 종료
		
for(int i=2;i>=0 ;i--) {
	System.out.println(i);
}
for(int i=0;i<3 ;i++) {
	System.out.println(2-i);
}


ForEx02

int n=5 ;
		
for(int i=0; i<30; i++) {
	if((i+1)%n==0) {
		System.out.println(i+1);
	}
}

for(int i=n ; i<=30; i+=n) {
		System.out.println(i);
}


ForEx03

int last = 10;
int tot = 0;
		
for(int i=1 ;i<=last ; i++) {
	tot += i;
}
System.out.println("1 ~ "+ last + " 까지의 합 : " + tot);
// 가우스 공식
tot = (last +1) * last / 2;
System.out.println(tot);		


ForEx04

int dan = 7;
System.out.println("- " + dan + " 단 -");
for(int i=0;i<9;i++) {
	System.out.println(dan + " * " + (i+1) + " = " + dan*(i+1));
}


ForEx05

중첩된 for 문

int n = 5;
for(int out=0;out<n;out++) {
	for(int i=0;i<5; i++) {
		System.out.print((i+1)+ " ");
	}
	System.out.println();
}

for(int i=0;i<8;i++) {
	System.out.println("--- "+(i+2)+"단 ---");
	for(int j=0;j<9;j++) {
		System.out.println((i+2) + " * " + (j+1) + " = " + ((i+2)* (j+1)));
	}
}


QuizFor

#1

지정한 숫자 만큼의 '*' 을 출력하는 코드를 작성

  • 횟수 : 3
    ***
System.out.println("횟수 입력 > ");
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
	System.out.print("*");
}

#2

1 ~ 50 사이의 3과 7의 배수를 출력하고, 각각의 배수의 합을 구하는 코드를 작성

  • 단, 3의 배수이면서 7의 배수도 되는 수는 한번만 출력
int tot3 = 0;
int tot7 = 0;
for (int i = 1; i <= 50; i++) {
	if (i % 3 == 0 && i % 7 == 0) {
		System.out.println("3과 7의 배수 : " + i);
		tot3 += i;
		tot7 += i;
	} else if (i % 3 == 0) {
		System.out.println("3의 배수 : " + i);
		tot3 += i;
	} else if (i % 7 == 0) {
		System.out.println("7의 배수 : " + i);
		tot7 += i;
	}
}
	
System.out.print("1 ~ 50 까지 3의 배수 합 : " + tot3);
System.out.println();
System.out.print("1 ~ 50 까지 7의 배수 합 : " + tot7);

#3

알파벳 대문자 A ~ Z 까지를 출력하는 코드를 작성
for 문이 한번 회전 될 때마다 알파벳 하나씩 출력



for (int i = 0; i < 26; i++) {
	System.out.print((char) (i + 65));
}

for (char ch = 'A'; ch <= 'Z'; ch++) {
	System.out.print(ch);
	if (ch != 'Z')
		System.out.print(", ");
}

#4

아래와 같은 출력을 진행하는 코드를 작성하세요

 1   2   3   4  5
 6   7   8   9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

내 코드

for (int i = 1; i <= 25; i++) {
	System.out.printf("%3d", i);
	if (i % 5 == 0) {
		System.out.println();
	}
}

강사님 코드

int data = 1;
for (int i = 0; i < 5; i++) {
	for (int j = 0; j < 5; j++) {
		System.out.printf("%3d", data);
		++data;
	}
	System.out.println();
}

#5

구구단 값을 아래와 같은 형태로 출력하는 코드를 작성하세요

  • Ex)
    2 * 1 = 2, 3 * 1 = 3, 4 * 1 = 4, ... 9 * 1 = 9
    2 * 2 = 4, 3 * 2 = 6, 4 * 2 = 8, ... 9 * 2 = 18
                            .............
    2 * 9 = 18, 3 * 9 = 27, 4 * 9 = 36, ... 9 * 9 = 81
for (int i = 1; i <= 9; i++) {
	for (int j = 2; j <= 9; j++) {
		System.out.print(j + " * " + i + " = " + (i * j) + ",\t");
		if (j == 9) {
			System.out.println();
		}
	}
}

강사님 코드

// 강사님 코드
for (int i = 1; i <= 9; i++) {
	for (int dan = 2; dan <= 9; dan++) {
		System.out.printf("%2d X %2d = %2d", dan, i, dan * i);
		if (dan != 9) {
			System.out.print(", ");
		}
	}
	System.out.println();
}

#6

  • 첫날에는 통자에 1원을 입금하고,
    둘째날 부터는 전날 입금액의 2배를 입금
  • 위와 같은 방식으로 30일동안 입금한 총 금액을 구하는 코드를 작성

내 코드

int m = 0;
int in = 1;
for(int i=0; i<30;i++) {
	m += in;
	in *=2;
}
System.out.println(m + " 원");

강사님 코드

int money = 0; // 입금
int balance = 0; // 잔액
		
for(int day =1 ; day <=30; day++) {
	if(day == 1 ) {
		money = 1;
	} else {
		money *=2;
	}
	balance += money;
	System.out.printf("%3d일 - 입금 : %10d원, 잔액 : %10d원\n", day,money,balance);
}
System.out.println("총 금액 : " + balance + " 원");

profile
Fintech

1개의 댓글

comment-user-thumbnail
2023년 8월 29일

구구단 오랜만이네요. 여전히👍👍

답글 달기