본문 바로가기

수업내용

[Day5][Java] switch case / 반복문(for) / break / continue

 

Ⅰ. switch case

-- Package(package my.day05.a.switchTest)와 Class(MainApp, Sungjuk)를 생성한다.

 

 

 

package my.day5.a.switchTest;

import java.util.Scanner;

public class MainApp {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("== 학생성적 등록하기 ==");
		System.out.print("1.학생명 : ");
		String name = sc.nextLine();

		System.out.print("2.국어점수 : ");
		String strKor = sc.nextLine();
		
		System.out.print("3.영어점수 : ");
		String strEng = sc.nextLine();
		
		System.out.print("4.수학점수 : ");
		String strMath = sc.nextLine();
		
		Sungjuk sung1 = new Sungjuk(name, Integer.parseInt(strKor), 
       			 Integer.parseInt(strEng), Integer.parseInt(strMath));
		
		sung1.showInfo();
		sc.close();
	}
}

 

 

 

-- 학생명, 국어점수, 영어점수, 수학점수를 입력 받고 showInfo()를 호출하여 학생 정보를 나타낸다.

 


 

▶ Sungjuk 클래스

 

 

 

package my.day5.a.switchTest;

import java.lang.invoke.SwitchPoint;

public class Sungjuk {

	String name;
	int kor;
	int eng;
	int math;
	
	public Sungjuk(String name, int kor, int eng, int math) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}

 

 

 

-- name(성명), kor(국어점수), eng(영어점수), math(수학점수) 변수를 선언한다.

 

 

 

int getTotal() {
		return kor+eng+math;
	}
	
double getAvg() {
		return Math.round((double)getTotal()/3*10)/10.0;
	}

 

 

 

-- 총합을 구하는 함수(getTotal)와 평균을 구하는 함수(getAvg)를 생성한다.

-- 평균은 10.0이 아닌 10으로 나누면 정수형이 되어버리므로 뒤의 숫자가 잘리기 때문에 보다 정확한 평균을 위해 꼭 10.0이나 getTotal()의 값을 double(실수형)으로 강제 형변환 해 주어야 한다.

 

 

 

char getGrade() {
		
		char result = ' ';
		
		int jumsu = (int)getAvg()/10;
		
		switch (jumsu) {
		case 10:	// jumsu가 10 또는 9와 같다라면
		case 9:	
			result = 'A';
			break;	// switch{} 부분을 빠져나가라.

		case 8:
			result = 'B';
			break;
			
		case 7:
			result = 'C';
			break;
			
		case 6:
			result = 'D';
			break;
			
		
		default:	// jumsu가 10, 9, 8, 7, 6이 아닌 다른 값이라면
			result = 'F';
			break;
		}
		
		return result;
	}

 

 

 

-- 학점을 정하는 getGrade() 함수를 생성한다.

-- sitch case를 사용하여 점수의 평균/10(int 형으로 강제 형변환하여 십의 자리만 나타낸다)이 10 또는 9일때는 A, 8일 때는 B, 7일 때는 C, 6일때는 D, 다른 값이라면 F가 result값에 저장되도록 한다.

 

 

 

	String getGift() {
		String result = "";
		
		char hakjum = getGrade();
		switch (hakjum) {
		case 'A':
			result += "놀이공원이용권, "; // result = result + "놀이공원이용권, "와 같다.
			
		case 'B':
			result += "뷔페식사권, ";
			
		case 'C':
			result += "치킨, ";

		case 'D':
			result += "아이스크림";
			break;
			
		default:
			result += "꿀밤 3대";
			break;
		}
		return result;	
	}
	void showInfo() {
		System.out.println("\n==== 성적 입력 결과 ====");
		System.out.println("1. 학생명 : " + name);
		System.out.println("2. 총점 : " + getTotal());
		System.out.println("3. 평균 : " + getAvg());
		System.out.println("4. 학점 : " + getGrade());
		System.out.println("5. 선물 : " + getGift());
		}
}

 

 

 

-- sitch case를 사용하여 학점이 D일 때 아이스크림, C일 때 치킨, B일 때 뷔페식사권, A일 때 놀이공원이용권이 추가되도록 한다. (break 걸지 않으므로 밑으로 계속 내려가 학점 D일 때 break를 만나 멈춘다.)

-- 학점이 A, B, C, D가 아니라면 꿀밤 3대가 result에 저장되도록 한다.

-- showInfo()함수를 만들어 성적 입력 결과가 출력되도록 한다.

 


 

switch case를 사용하여 정수와 사칙연산을 입력 받아 계산하는 코드를 만들어 보자.

 

 

 

package my.day5.b.switchTest;

import java.util.Scanner;

public class MainApp {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.print("▷ 첫번째 정수 입력 : ");
		int num1 = sc.nextInt();
		sc.nextLine();
		
		System.out.print("▷ 첫번째 정수 입력 : ");
		int num2 = sc.nextInt();
		sc.nextLine();

		System.out.print("▷ 사칙연산선택(+ - * /): ");
		String op = sc.nextLine();
		
		double result = 0;
		
		switch (op) {
		
		case "+":
			result = num1 + num2;
			break;
			
		case "-":
			result = num1 - num2;
			break;

		case "*":
			result = num1 * num2;
			break;
			
		case "/":
			result = (double)num1 / (double)num2;
			// 소수부 세 자리까지만 나타냄
			result = (Math.round(result * 1000))/1000.0;
			break;
		}
		sc.close();
	}
}

 

 

 


 

Ⅱ. 반복문(for)

 

-- Package(my.day05.c.forTest)를 생성한다.

 

1. for 문의 형식

 

 

 

 for(초기화; 조건식; 증감식) { 
            반복해서 실행할 문장; 
        }   

 

 


2. 순서


1) 초기화;
2) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.         
              조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
              } 을 빠져나간다.)
3) 증감식
4) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.         
              조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
              } 을 빠져나간다.) 
5) 증감식
6) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.         
              조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
              } 을 빠져나간다.)   

 

 

▶ MainForTest1 클래스

 

 

 

 

for(int i=0; i<10; i++) {
			System.out.println((i+1)+".안녕자바~");
		}

▷ 결과

1.안녕자바~
2.안녕자바~
3.안녕자바~
4.안녕자바~
5.안녕자바~
6.안녕자바~
7.안녕자바~
8.안녕자바~
9.안녕자바~
10.안녕자바~

 

 

 

for(int i=0; i<10; i++) {
			System.out.println(++i + ".안녕 이클립스~");
		}

 

 

 

▷ 결과

1.안녕 이클립스~
3.안녕 이클립스~
5.안녕 이클립스~
7.안녕 이클립스~
9.안녕 이클립스~

 

 

 

for(int i=0; i<10; i+=2) {	// i=i+2 할당연산자 / 연산 후 할당
			System.out.println((i+1)+".안녕 오라클~~");
		}

 

 

 

▷ 결과

1.안녕 오라클~~
3.안녕 오라클~~
5.안녕 오라클~~
7.안녕 오라클~~
9.안녕 오라클~~

 

 

 

for(int i=0,j=0; i<10; i++,j+=2) {
			System.out.println((j+1)+".안녕 Java~~");
		}

 

 

 

▷ 결과

1.안녕 Java~~
3.안녕 Java~~
5.안녕 Java~~
7.안녕 Java~~
9.안녕 Java~~
11.안녕 Java~~
13.안녕 Java~~
15.안녕 Java~~
17.안녕 Java~~
19.안녕 Java~~

 

 

 

for(int i=10; i>0; i--) {
			System.out.println(i+".안녕 오라클~~");
		}

 

 

 

▷ 결과

10.안녕 오라클~~
9.안녕 오라클~~
8.안녕 오라클~~
7.안녕 오라클~~
6.안녕 오라클~~
5.안녕 오라클~~
4.안녕 오라클~~
3.안녕 오라클~~
2.안녕 오라클~~
1.안녕 오라클~~

 

 

 

for(int i=0,j=9; i<5; i++,j-=2) {
			System.out.println(j+".안녕 자바~~");
		}

 

 

 

▷ 결과

9.안녕 자바~~
7.안녕 자바~~
5.안녕 자바~~
3.안녕 자바~~
1.안녕 자바~~

 

 

 


for문을 사용하여 ABCDEFGHIJKMLN 를 출력해 보자.

 

 

 

for(int i=0; i<'Z'-'A'+1; i++) {
			System.out.print((char)('A'+i));
		}

 

 

 

-- char형은 사칙연산을 만나면 int형으로 바뀐다.

 


 

for문을 사용하여 ACEGIKLOQSUWY를 출력해 보자.

 

 

 

for(int i=0; i<'Z'-'A'+1; i+=2) {	
			System.out.print((char)('A'+i));
		}

 

 

 

 


 

for문을 사용하여 아래 유니코드를 출력해 보자.

 

 

▷ 첫 번째 방법

 

 

 

for(int i=0; i<20; i++) {
			System.out.print((char)('\u2460'+i));
		}

 

 

 

▷ 두 번째 방법

 

 

 

System.out.println("");
		for(int i=0; i<20; i++) {
			System.out.print((char)(9312+i));
		}

 

 

 

▷ 세 번째 방법

 

 

 

for(int i=9312; i<9332; i++) {
			System.out.print((char)i);
		}

 

 


 

 

아래의 결과가 나오도록 만들어 보자.

 

 

 

 

 

int n=0, m=0;
		for(; n<5; n++) {
			System.out.println((n+1)+".차은우");
		}
		System.out.println(">> 차은우" + n + "명<<");
		
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		
		for(; n<10; n++) {
			System.out.println((n+1)+".차금우");
			m++;
		}
		System.out.println(">> 차금우" + m + "명<<");

 

 

 


 

 

Ⅱ. break / continue

 

-- 위와 같은 Package(my.day05.c.forTest)에 Class(MainForTest2)를 생성한다.

 

1. break

 

 

 

for(int i=0; i<10; i++) {
			if(i==5) break;
			System.out.print(i+1);
		}

 

 

 

-- 반복문에서 break; 를 만나면 가장 가까운 반복문을 벗어난다.

▷ 결과

12345

 

 

-- Class(MainForTest2)를 생성한다. (무한루프와 break)

 

 

 

public class MainForTest3 {

	public static void main(String[] args) {
		int cnt = 0;
		for(;;) {
			System.out.println(">>" + ++cnt+ "번째 반복 <<");
			
			if(cnt == 10) break;
		}
		System.out.println("=== 프로그램 종료 ===");
	}
}

 

 

 

-- for(;;) { } 은 무한루프이므로 break; 가 있어야 빠져나올 수 있다.

 

 

2. continue

 

 

 

for(int i=0; i<10; i++) {
			if((i+1)%2==0)
				continue;
			System.out.println(i+1);
		}

 

 

 

-- continue; 를 만나면 실행 순서가 가장 가까운 반복문의 증감식으로 올라가 버린다.

▷ 결과

1
3
5
7
9

 

 


 

문제 ▷▷

break를 사용하여 알파벳 소문자를 모두 출력하는 도중에 소문자 k를 만나면  소문자 k까지만 출력하고 중지하시오.

 

▷ 첫 번째 방법

 

 

 

for(char i='a'; i<'z'; i++) {
			System.out.print(i);
			if(i=='k') break;
		}

 

 

 

▷ 두 번째 방법

 

 

 

int cnt = 'z'-'a'+1;
		
		for(int i=0; i<cnt; i++) {
			char ch = (char)('a'+i);
			System.out.print(ch);
			
			if(ch=='k') break;
		}

 

 

 

 


 

 

문제 ▷▷

continue를 사용하여 알파벳 소문자를 출력하는데 아래처럼 나타내도록 하세요.

a c e g i k m o q s u w y

 

▷ 첫 번째 방법

 

 

 

for(int i=0; i<'z'-'a'+1; i++) {
			if((i+1)%2==0) {
				System.out.print(" ");
				continue;
			}
			System.out.print((char)(97+i));
		}

 

 

 

▷ 두 번째 방법

 

 

 

for(int i=0; i<cnt; i++) {
			char ch = (char)('a'+i);
			if(i%2!=0) continue;	// i==> 1, 3, 5, 7 ... 홀수는 찍지 않음
			
			System.out.print(ch+" ");
}

 

 

 

-- ch+' '  ==> char와 사칙연산이 만나면 int형으로 바뀐다
-- ch+" "  ==> 문자열 결합

 


 

-- 어떠한 문자열의 일부분만 뽑아내는 String Class method

 

 

 

String str = "대한민국 서울시 강남구";
				   // 0 1 2 3 4 5 6 7 8 9 10 11
		System.out.println(str);
		// 대한민국 서울시 강남구
		
		System.out.println(str.substring(5, 8));
		// 어떠한 문자열의 일부분만 뽑아내는 것
		// endIndex 앞까지
		
		System.out.println("변수 str의 글자수 : "+str.length());

 

 

 

▷ 결과

대한민국 서울시 강남구
서울시
변수 str의 글자수 : 12

 


 

문제 ▷▷ 아래의 결과를 나타내는 프로그램을 만들어 보자.

 

 

 

 

 

package my.day5.c.forTest;

import java.util.Scanner;

public class MainForQuiz1 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);

		int inputNum1=0, inputNum2=0;
		int sum=0;
		
		for (;;) {
			try {
				System.out.print(">> 첫 번째 정수 입력 : ");
				inputNum1 = Integer.parseInt(sc.nextLine());
				break;
			} catch (NumberFormatException e) {
				System.out.println("== 정수만 입력하세요!! ==");
			}
		}
		
		for (;;) {
			try {
				System.out.print(">> 두 번째 정수 입력 : ");
				inputNum2 = Integer.parseInt(sc.nextLine());
				break;
			} catch (NumberFormatException e) {
				System.out.println("== 정수만 입력하세요!! ==");
			}
		}
		
		 for(int i=inputNum1; i<inputNum2+1; i++) {
			sum += i;
		}
		System.out.println(inputNum1+"부터"+inputNum2+"까지의 누적의 합은"+sum+"입니다.");
		
		System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 
		String holsuStr ="", jaksuStr = "";
		int holsusum=0, jaksuSum=0;
		for(int i=inputNum1; i<inputNum2+1; i++) {
			if(i%2!=0) {
				holsuStr += i+",";
				holsusum += i;
			} else {
				jaksuStr += i+",";
				jaksuSum += i;
			}
		}
		System.out.println(inputNum1+"부터"+inputNum2+"까지의 홀수 : "+holsuStr.substring(0, holsuStr.length()-1));
		System.out.println(inputNum1+"부터"+inputNum2+"까지의 홀수의 누적치 : "+holsusum);
		System.out.println(inputNum1+"부터"+inputNum2+"까지의 짝수 : "+jaksuStr.substring(0, jaksuStr.length()-1));
		System.out.println(inputNum1+"부터"+inputNum2+"까지의 짝수의 누적치 : "+jaksuSum);
		sc.close();
	}
}