[Java][국비교육] Day 8

Ga02·2023년 1월 5일

국비교육

목록 보기
7/82

반복문, Loop

반복문에서는 i 변수(iterate, 반복한다) 를 많이 사용

  • for문과 while문은 서로 치환 가능
    • for문은 반복횟수가 정해져있거나, 정수값의 반복을 적용할 때
    • while문은 반복횟수가 명확하지 않거나 정해지지 않았을 때 👉🏻 종료조건만 주어진 경우 많이 사용

🔍 for문

for( 초기식 ; 조건식 ; 증감식 ) {
	//조건식이 참(true)일 동안 반복적으로 실행하는 영역
}
  • for문의 초기식, 증감식에는 ,(콤마)를 사용해 여러개의 코드를 사용할 수 있음
for( int i=0 ; i<5 ; i++ ) {
	System.out.println("HI : " + i)
}
------------------------------------------------------
int i; //for문 밖에서 i의 값을 사용하기 위해 미리 선언
for( i=0 ; i<10 ; i++ ) {
	System.out.println(i)
}
System.out.println("반복문이 종료된 이후 i 변수의 값 : " + i);
➡ i=10 / i의 값이 10까지 증가한 후 조건식 판별 결과 false이므로 출력을 안함

➰ for문 읽는 방법

  • 초기식 : i변수가 0부터 시작해서
  • 조건식 : i변수의 값이 5보다 작은 동안
  • 증감식 : i변수를 1씩 증가시키면서
  • {} 코드 영역을 실행

➰ for문 실행 순서

  1. 초기식 실행
  2. 조건식 판별
    2-1. true일 때 👉🏻 3번 항목 수행
    2-2. false일 때
  3. {} 영역 실행
  4. 증감식 실행
  5. 2번 항목 실행

💭 Q. 1부터 10까지의 총합 구하기

int sum=0;

sum = sum+1;
sum = sum+2;
sum = sum+3;
sum = sum+4;
sum = sum+5;
sum = sum+6;
sum = sum+7;
sum = sum+8;
sum = sum+9;
sum = sum+10;

💡 반복 패턴을 찾자!

  • 어떤 값을 반복적으로 증감시킬것인가?
  • 중복되는 부분을 코드로 작성할 것
for(int i=1 ; i<=10 ; i++) {
	sum +=i
    System.out.println("중간결과 : " + sum); //중간결과 확인 코드
    System.out.println();
}
System.out.println("최종결과 : " + sum);

💭 Q. 첫날에 10원을 예금하고, 다음날에는 전날의 2배를 예금하는 방식으로 보름(15일)동안 저축한 금액은?

💡 변수로 만들 키워드 찾기

  • 15일 동안 : for문의 변수 day
  • 예금액 : 전날의 2배로 만들 매일 2배가 될 money
  • 저축한 금액 : 매일 예금액이 쌓인 total
int money=10;
int total=0;

for(int day=0 ; day<15 ; day++) {
	total += money;
    money *=2;
}

System.out.println("저축한 총 금액 : " + total + "원+); //15일동안 저축한 금액
  • 초기식, 증감식을 for문에 포함해서 한줄로 작성해보기 👉🏻 짧다고 좋은 코드는 아님. 가독서잉 좋은 위에 코드가 더 좋은 코드
int total=0; //for문 밖에서 total 변수를 사용하기 위해 미리 선언
for(int day=0, money=0 ; day<15 ; day++, total+=money, money *=2)

System.out.println("저축한 총 금액 : " + total + "원");

➰ 제어문 중첩시켜 사용하기

  • for문과 if문의 중첩
for(int i=0 ; i<10 ; i++) { //i가 10보다 작을 동안 반복
	
    if(i%2==0) { //만약 i를 2로 나눴을 때 나머지가 0이라면 다음 코드 출력
    	System.out.println("짝수 : " + i);
    }
}

👉🏻 for문만으로도 같은 조건 출력 가능

for(int i=0 ; i<10 ; i+=2) {
	System.out.println("짝수 : " + i);
}
  • 이중 for문, for문 중첩
    바깥쪽 for문의 반복횟수와 반복구간에 맞춰서 안쪽 for문의 반복횟수, 반복구간을 생각해야 함
for(int i=0 ; i<3 ; i++) {

	for(int j=0 ; j<3 ; j++) {
    	System.out.println("i : " + i + ", j : " + j); 
    }
    System.out.println("--------------"); //j 한바퀴 돌고 경계선 출력
}

💭 Q. 2~9단 구구단 출력하기 ver. for문

💡 바깥쪽 for문으로 할 것과 안쪽 for문으로 할 것 정하기

  • 바깥쪽 for문 : 2~9까지 dan
  • 안쪽 for문 : 1~9까지 곱할 i
for(int dan=2 ; dan<=9 ; dan++) {
	for(int i=1 ; i<=9 ; i++) {
    	System.out.println(dan + " * " + i + " = " + dan*i);
    }
    System.out.println(); //한 단 출력하고 줄바꿈
}

🔍 while문

초기식;
while( 조건식 ) {
	//조건식이 참(true)일 때 반복 실행하는 영역
    
    증감식;
}

➰ for문에서의 치환

for(int i=0 ; i<10 ; i++) {
	System.out.println(i);
}
			👇🏻
int i=0;
while(i<10) {
	System.out.println(i);
    i++
}

💭 Q. 2~9단 구구단 출력하기 ver. while문

int dan=2;
while(dan<=9) {

	int i=1;
	while(i<=9) {
    	System.out.println(dan + " * " + i + " = " + dan*i);
		i++
    }
    
    System.out.println(); //한 단 출력하고 줄바꿈
    dan++
}

🔍 Do-while문

do {
	//반복 수행하는 코드
} while( 조건식 );

do 키워드를 만나면 조건 검사없이 일단 {} 영역 코드를 실행, 이후에 while의 조건식 검사를 하고 true면 do부터 다시 반복 false면 중단
👉🏻 최초 1회는 무조건 실행하고 다음부터 조건에 따라 반복 결정

do {
	System.out.println("HIHI");
} while(false);
➡ HIHI 한 번 출력

💭 Q. 숫자를 입력하고 그 값을 다시 출력, 99를 입력하면 종료한다.

💡 do로 먼저 실행되어야 할 사항 정하기

  • 숫자를 입력 받고 : do에서 입력 먼저 받기
Scanner sc = new Scanner(System.in);
int num;

do {
	System.out.print("Input Number(종료 = 99) : ");
    num = sc.nextInt();
    
    System.out.println("입력한 값 : " + input);
} while(num!=99);
➡ num의 값이 99가 아닐동안 do 계속 실행

🔍 break;

반복문 또는 switch문에서 사용

  • 중첩된 제어문에서 사용시 가까운 제어문 한개만 break
for(int i=0 ; i<5; i++) {
	for(int j=0; j<5; j++) {
    
		if(i>=2) { 
			break; //➡ break는 반복문에서만 사용되므로 if에 영향x j for문을 멈춤
		}
		System.out.println("i : " + i + ", j : " + j);
    }
}
➡ j가 0, 1일 때만 출력

💭 Q. 숫자를 입력하고 그 값을 다시 출력, 99를 입력하면 종료한다.

💡 break 걸 조건

  • 99를 입력하면 종료 : num == 99면 break;
Scanner sc = new Scanner(System.in);
int num;

while(true) {
	System.out.print("Input Number(종료 = 99) : ");
    num = sc.nextInt();
    
    System.out.println("입력한 값 : " + input);
	
    if(num==99) {
    	break;
    }
}

➰ Labled Break;

OuterLoop: 👉🏻 for문에 이름을 붙여줌. 레이블 된 반복문
for(int i=0;i<5;i++) {
			
	InnerLoop:
	for(int j=0;j<5;j++) {
    
		if(j>=2) {
			break; //👉🏻 가까운 InnerLoop 중단
			break OuterLoop; //👉🏻 레이블 된 OuterLoop 중단
		}
        
		System.out.println("i : " + i + ", j : " + j);
	}
	System.out.println();
}

🔍 continue;

반복문에서만 사용할 수 있는 제어문

  • 현재 반복문의 {} 남은 부분을 1번 건너뛰고 다음 반복을 수행
for(int i=0; i<10; i++) {
	if(i%2 == 0) { //i가 짝수면 건너뛰기
    	continue;
    }
    System.out.println(i);
}
➡ 홀수만 출력

🔍 switch문, switch-case문

비교대상과 같은 값으로 지정한 case구문의 위치부터 아래쪽 코드를 전부 실행 ➡ 조건문으로 분류하기도 함

  • case의 값들 중 같은 값이 없으면 default 실행 👉🏻 default 생략 가능
switch( 비교대상 ) {
case 비교값1:
    
case 비교값2:
    
case 비교값3:
    
...
    
default:
}

➰ if문과의 치환

  • switch는 범위비교는 할 수 없음 👉🏻 범위조건은 if문 사용
int score = 88; //점수

<if>
if(score>=90) {
	System.out.println("A등급");
} else if(score >=80) {
	System.out.println("B등급");
} else if(score >=70) {
	System.out.println("C등급");
} else if(score >=60) {
	System.out.println("D등급");
} else {
	System.out.println("F등급");
}
-------------------------------------- 
<switch>
switch(score/10) { ➡ score를 10으로 나누면 n0점대 대로 정수 n으로 값 판단 가능
case 10:
	System.out.println("A+등급");
    break;
case 9:
	System.out.println("A등급");
    break;
case 8:
	System.out.println("B등급");
    break;
case 7:
	System.out.println("C등급");
    break;
case 6:
	System.out.println("D등급");
    break;
default:
	System.out.println("F등급");
}

➰ switch의 비교대상

정수로 표현 가능한 것만 switch의 비교대상이 될 수 있음

  • double, boolean 불가
  • String 👉🏻 JDK 버전에 따라 불가능한 경우도 있어 사용하지 않는 것이 좋음
  • char 👉🏻 char은 컴퓨터에서 정수값(ASCII CODE)로 처리됨
char alpha = 'B';
		
switch(alpha) {
case 'A':
	System.out.println("A입니다");
	break;
case 'B':
	System.out.println("B입니다");
	break;
}

💭 Q. 각 메뉴를 입력하면 메뉴에 알맞게 동작하도록 작성하시오.

===============================
M e n u
===============================
1. Hello World 출력
2. 이름 출력
3. 성별 출력
4. 종료
===============================

>> _

System.out.println("===============================");
System.out.println("   M  e  n  u");
System.out.println("===============================");
System.out.println("   1. Hello World 출력");
System.out.println("   2. 이름 출력");
System.out.println("   3. 성별 출력");
System.out.println("   4. 종료");
System.out.println("===============================");
System.out.print("\t>>");

Scanner sc = new Scanner(System.in);
int menu = sc.nextInt();

  switch(menu) {
  case 1: 
      System.out.println("Hello World");
      break;
  case 2:
      System.out.println("Name");
      break;
  case 3:
      System.out.println("Gender");
      break;
  case 4:
      System.out.println("종료되었습니다.");
      break;
  default:
      System.out.println("잘못입력하셨습니다");
  }

💭 Q. 각 메뉴를 입력하면 메뉴에 알맞게 동작하도록 작성하시오 ver. Loop

int menu; 👉🏻 do문 밖에서 menu를 사용하기 위해 먼저 선언

do {
  System.out.println("===============================");
  System.out.println("   M  e  n  u");
  System.out.println("===============================");
  System.out.println("   1. Hello World 출력");
  System.out.println("   2. 이름 출력");
  System.out.println("   3. 성별 출력");
  System.out.println("   4. 종료");
  System.out.println("===============================");
  System.out.print("\t>>");

  Scanner sc = new Scanner(System.in);
  menu = sc.nextInt();

  System.out.print("\t>>"); //출력부분 가독성이 좋게 추가해줌
  
    switch(menu) {
    case 1: 
        System.out.println("Hello World");
        break;
    case 2:
        System.out.println("Name");
        break;
    case 3:
        System.out.println("Gender");
        break;
    case 4:
        System.out.println("종료되었습니다.");
        break;
    default:
        System.out.println("잘못입력하셨습니다. 다시 입력해주세요.");
    }
} while (menu!=4);
profile
IT꿈나무 댓츠미

0개의 댓글