
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("?");
}

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("없는 과목임");
}

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);

버스 단말기 코드를 작성하세요
- 요금 : 일반(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 + " 원");
}

간단한 사칙연산 계산기 코드를 작성하세요
- 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("연산자 선택 오류");
}

월을 입력받아서 해당 월이 몇일까지 있는지를 알려주는 코드를 작성
- 단, 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("월 오류");
}

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);
}

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);
}

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);

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

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)));
}
}

지정한 숫자 만큼의 '*' 을 출력하는 코드를 작성
- 횟수 : 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);

알파벳 대문자 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(", ");
}

아래와 같은 출력을 진행하는 코드를 작성하세요
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();
}

구구단 값을 아래와 같은 형태로 출력하는 코드를 작성하세요
- 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();
}

- 첫날에는 통자에 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 + " 원");

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