else if 문의 문제점
- 메뉴가 늘어날수록 흐름이 길어진다.
- 메뉴가 늘어날수록 실행이 느려진다.
분기문을 이용한 선택흐름

switch문을 이용한 선택흐름
switch(menu){
case1:
break;
case2:
break;
case3:
break;
}
중첩된 제어구조 벗어나기

public class Program {
public static void main(String[] args) {
int n = 0;
Scanner scan = new Scanner(System.in);
System.out.println("값을 sp로 구분해서 5개 이상 입력하세요:");
// 3 Enter, 34 5 6 234 345 54 45 Enter
while(scan.hasNext()) {
n = scan.nextInt();
if (n < 10)
continue;
if (n > 200)
break;
System.out.println(n);
}
}
}
// 34
저장소 구현
- int[] kors = new int[3];
- 3개짜리 배열 완성

package ex14.array;
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
int kor1, kor2, kor3;
int[] kors = new int[3];
int total;
float avg;
int menu;
Scanner scan = new Scanner(System.in);
// default
kor1 = 0;
kor2 = 0;
kor3 = 0;
for (int i = 0;i<3;i++) {
kors[i] = 0;
}
종료:
while(true) {
//-----메인 메뉴 부분
System.out.println("┌───────────────────┐");
System.out.println("│ 메인메뉴 │");
System.out.println("└───────────────────┘");
System.out.println("\t1.성적입력");
System.out.println("\t2.성적출력");
System.out.println("\t3.종료");
System.out.println("\t>");
menu = scan.nextInt();
switch(menu){
case 1:
// ------------성적 입력
System.out.println("┌───────────────────┐");
System.out.println("│ 성적입력 │");
System.out.println("└───────────────────┘");
for (int i=0;i<3;i++) {
do {
System.out.printf("국어%d:", i+1);
kors[i] = scan.nextInt();
if(kors[i] < 0 || 100 < kors[i]) {
System.out.println("성적범위(0~100)를 벗어났습니다.");
}
}while(kors[i] < 0 || 100 < kors[i]);
}
break;
case 2:
// ------------성적 출력
// total = kor1 + kor2 + kor3;
total = kors[0] + kors[1] + kors[2];
avg = total / 3.0f;
System.out.println("┌───────────────────┐");
System.out.println("│ 성적출력 │");
System.out.println("└───────────────────┘");
for(int i=0;i<3;i++) {
System.out.printf("국어%d : %d\n", i+1, kors[i]);
}
System.out.printf("총점 : %3d\n", total);
System.out.printf("평균 : %6.2f\n", avg);
break;
case 3:
break 종료;
default:
System.out.println("1~3까지만 입력할 수 있습니다.");
}
}
System.out.println("goodbye~");
}
}
package ex15.arrays.copy;
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
int kor1, kor2, kor3;
int[][] kors = new int[3][3];
int[] total = new int[3];
float[] avg = new float[3];
int menu;
Scanner scan = new Scanner(System.in);
// default
kor1 = 0;
kor2 = 0;
kor3 = 0;
for (int i = 0;i<3;i++) {
for(int j=0;j<3;j++) {
kors[i][j] = 0;
}
}
종료:
while(true) {
//-----메인 메뉴 부분
System.out.println("┌───────────────────┐");
System.out.println("│ 메인메뉴 │");
System.out.println("└───────────────────┘");
System.out.println("\t1.성적입력");
System.out.println("\t2.성적출력");
System.out.println("\t3.종료");
System.out.println("\t>");
menu = scan.nextInt();
switch(menu){
case 1:
// ------------성적 입력
System.out.println("┌───────────────────┐");
System.out.println("│ 성적입력 │");
System.out.println("└───────────────────┘");
for (int i=0;i<3;i++) {
System.out.printf("%d학년 성적입력\n", i+1);
for(int j=0;j<3;j++) {
do {
System.out.printf("국어%d:", j+1);
kors[i][j] = scan.nextInt();
if(kors[i][j] < 0 || 100 < kors[i][j]) {
System.out.println("성적범위(0~100)를 벗어났습니다.");
}
}while(kors[i][j] < 0 || 100 < kors[i][j]);
}
}
break;
case 2:
// ------------성적 출력
// total = kor1 + kor2 + kor3;
for(int i=0;i<3;i++) {
for (int j=0;j<3;j++) {
total[i] = kors[i][j] + kors[i][j] + kors[i][j];
avg[i] = total[i] / 3.0f;
}
}
System.out.println("┌───────────────────┐");
System.out.println("│ 성적출력 │");
System.out.println("└───────────────────┘");
for(int i=0;i<3;i++) {
System.out.printf("<%d학년 국어성적>-------\n", i+1);
for (int j=0;j<3;j++) {
System.out.printf("국어%d : %d\n", j+1, kors[i][j]);
}
System.out.printf("총점 : %3d\n", total[i]);
System.out.printf("평균 : %6.2f\n", avg[i]);
}
break;
case 3:
break 종료;
default:
System.out.println("1~3까지만 입력할 수 있습니다.");
}
}
System.out.println("goodbye~");
}
}
변수와 상수변수
- 상수형 변수가 필요한 경우?
- 나중에 봐도 쉽게 알아보기 위해서
- 코드의 가독서을 높이기 위해서

package ex16.final_;
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
int kor1, kor2, kor3;
int[][] kors = new int[3][3];
int[] total = new int[3];
float[] avg = new float[3];
int menu; // 1: input, 2: print, 3: exit;
final int MENU_INPUT = 1;
final int MENU_PRINT = 2;
final int EXIT = 3;
Scanner scan = new Scanner(System.in);
// default
kor1 = 0;
kor2 = 0;
kor3 = 0;
for (int i = 0;i<3;i++) {
for(int j=0;j<3;j++) {
kors[i][j] = 0;
}
}
종료:
while(true) {
//-----메인 메뉴 부분
System.out.println("┌───────────────────┐");
System.out.println("│ 메인메뉴 │");
System.out.println("└───────────────────┘");
System.out.println("\t1.성적입력");
System.out.println("\t2.성적출력");
System.out.println("\t3.종료");
System.out.println("\t>");
menu = scan.nextInt();
switch(menu){
case MENU_INPUT:
// ------------성적 입력
System.out.println("┌───────────────────┐");
System.out.println("│ 성적입력 │");
System.out.println("└───────────────────┘");
for (int i=0;i<3;i++) {
System.out.printf("%d학년 성적입력\n", i+1);
for(int j=0;j<3;j++) {
do {
System.out.printf("국어%d:", j+1);
kors[i][j] = scan.nextInt();
if(kors[i][j] < 0 || 100 < kors[i][j]) {
System.out.println("성적범위(0~100)를 벗어났습니다.");
}
}while(kors[i][j] < 0 || 100 < kors[i][j]);
}
}
break;
case MENU_PRINT:
// ------------성적 출력
// total = kor1 + kor2 + kor3;
for(int i=0;i<3;i++) {
for (int j=0;j<3;j++) {
total[i] = kors[i][j] + kors[i][j] + kors[i][j];
avg[i] = total[i] / 3.0f;
}
}
System.out.println("┌───────────────────┐");
System.out.println("│ 성적출력 │");
System.out.println("└───────────────────┘");
for(int i=0;i<3;i++) {
System.out.printf("<%d학년 국어성적>-------\n", i+1);
for (int j=0;j<3;j++) {
System.out.printf("국어%d : %d\n", j+1, kors[i][j]);
}
System.out.printf("총점 : %3d\n", total[i]);
System.out.printf("평균 : %6.2f\n", avg[i]);
}
break;
case EXIT:
break 종료;
default:
System.out.println("1~3까지만 입력할 수 있습니다.");
}
}
System.out.println("goodbye~");
}
}