코드 그라데이션

Day04 - 반복문 본문

Java/Mega

Day04 - 반복문

완벽한 장면 2023. 3. 17. 08:58

복습 설명 내용

문자열이 하나라도 섞이면 숫자는 전부 문자열화 되어버린다.

 

switch문은 상등비교밖에 안 된다.

같은 케이스를 그루핑

 

반드시 break 필요하다.

if 3개는 다 비교

if

else if

else 는 위의 조건 중에 하나가 맞으면 더 이상 조건을 확인하지 않습니다.

 

반복문의 쓰임

원하는 명령문 또는 실행문을 원하는 횟수 만큼 반복을 시키기 위해서 사용을 합니다.

 

 

실행과 탈출

반복문은 조건이 참이면 반복

/ 조건문 조건이 참이면 실행

 

거짓이면 탈출

 

** 조심 : 탈출조건에 대한 강박에서 벗어나기.

** 처음부터 탈출조건을 돌리면, 반복문 자체가 안 돌아간다.

 

왜 필요?

밥 먹을 때, 한 숟갈 뜨고 끝낸다? 그렇지 않지. 숟가락질을 반복적으로 해서 원하는 만큼 먹겠죠.

이런 현실이 있기 때문에 우리는 반복문을 쓴다.

우리가 쓰고 있는 window도 무한루프로 반복으로 돌아간다.

 

먼저,

While

조건이 참이면 반복

조건이 거짓이면 탈출

 

구조

while(조건){

    명령문

    실행문

}

 

cf. do-while문

** 지금 세미콜론 쓰인 건데, 조심해

do{
   명령문
   실행문
}while(조건);

 쓰기를 지양하는 이유

  1. 모양이 자기만 다르다. (소괄호 뒤에 세미콜론 붙는 건 반복문에 없다.
  2. while문은 처음 조건이 false이면 실행 아예 안하지만, do-while은 처음 조건이 false여도 한번은 실행해준다.

⇒ 한 번은 나오니까, 이 논리가 틀렸는데, 혼란을 초래해버림.

 

사례) 1부터 10까지를 출력하는 프로그램 만들기

package Day04;

public class WhileTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int hap = 0, count = 1; // 같은 자료형이면, 이렇게 이어서 선언이 가능하다.
		while(count <= 10) {
			hap = hap + count; 
			count = count + 1;
		} System.out.println("1부터 10까지의 합은 " + hap + " 입니다.");
	}

}

 

이거 경우의 수 정리(조건문은 안되면 적어라)

Hap = 0, count = 1

Hap = 1, count = 2

Hap = 3, count = 3

Hap = 6, count = 4

Hap = 10, count = 5

Hap = 15, count = 6

Hap = 21, count = 7

Hap = 28, count = 8

Hap = 36, count = 9

Hap = 45, count = 10

Hap = 55, // count =11

따라서 55 가 출력됨.

 

cf. 무한루프

while(true) { // 가능하다. 무한루프!

}

 

연습해보기

1부터 입력받은 수까지 합 출력하는 프로그램 만들기

package Day04;

import java.util.Scanner;
public class WhileTest2 {
// 입력받은 수만큼 더해서 출력하는 프로그램 작성하기
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		Scanner sc = new Scanner(System.in);
		System.out.println("원하는 숫자를 입력하세요. : ");
		int countMax = sc.nextInt();
		
		int total = 0;
		int count = 1;
		
	
		while(count <= countMax) {
			total = total + count;
			count ++;
			
		}
		System.out.printf("1부터 %d까지의 합은 %d 입니다.", countMax, total);
		
		//원래 했던 것에서 10만 사용자 입력값으로 치환해주면 되는 거다.
	}
}

 

선생님 풀이

(훨씬 간단해)

선생님 풀이
package Day04;
import java.util.Scanner;

public class WhileTest2_T {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);
		System.out.println("숫자를 입력하세요");
		int inputNum = sc.nextInt();
		
		int hap = 0, count = 1;
		while(count <inputNum) {
			hap = hap + count;
			count = count + 1;
		} System.out.println("1부터" + inputNum + "까지의 합은 " + hap + " 입니다.");
	}

}

 

 

for

for(초기식 ; 조건식 ; 증감식) {

명령문

실행문

}

초기문 값을 세팅하고, 조건문을 확인, 증감문을 이용해서 값을 증가하거나 감소하면서 조건이 false가 될 때까지 반복.

 

 

<1회>

  1. 초기문
  2. 조건문
  3. 명령문

<2회>

  1. 증가감문
  2. 조건문
  3. 명령문

2회 이후부터는 계속 2회처럼 움직입니다.

 

<비교>

돌려보면 for(int i = 10; i>0; i --) 하고

for(int i - 10; i! = 0; i --) 는 똑같은 의미이다.

 

이런 것도 가능

 

for문 예시

1부터 10까지의 합 출력

package Day04;

public class ForTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int hap = 0;
		for(int count = 1; count <= 10 ; count++) {
			hap = hap + count;
		}
		System.out.println("1부터 10까지의 합은 " + hap + " 입니다.");
	}

}

 

만약 여기서 7, 8을 빼고 계산하고 싶다면? => 그러니까 15를 제외시키므로, 40이 출력되겠지

만약 7과 8을 빼고 싶다면?
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int hap = 0;
		for(int count = 1; count <= 10 ; count++) {
			if(count != 7 && count != 8) { // 아니면 괄호로 싸면 더 편하지! if(!(count != 7 || count != 8))
			hap = hap + count;
			}
		}
		System.out.println("1부터 10까지의 합은 " + hap + " 입니다.");
	}

}

 

 

그렇다면...

반복문 안에 조건문? 또는 조건문 안에 반복문을 사용 할 수 있을까요?

됩니다.

반복문 안에 반복문이 될까요?

됩니다.

 

=> 무한히 삽입 가능!

 

예시 문제

숫자를 하나 입력을 받습니다.

입력받은 숫자의 약수를 출력하는 프로그램을 만들어주세요.

 

 

내 방법 - 문자열 더하기 활용(사실 처음 써봄)

package Day04;

import java.util.Scanner;
public class Q2 {
//8의 약수를 출력하는 프로그램 만들기
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.print("약수를 구하고 싶은 숫자를 입력하세요. : ");
		int inputNum = sc.nextInt();
		String ment = "";
		
		for(int i = 1; i <= inputNum; i++ ) {
			if (i != inputNum) { // 마지막 숫자에 ,가 붙지 않게 만들어줌
				if (inputNum % i ==0) { // 약수 구하기
					ment += i; // 표기법을 위해 String 방식으로 합산을 해준다.
					ment += ", ";
				
				}
			}
		}
		System.out.println(inputNum + "의 약수는 " + ment + inputNum + " 입니다.");
	}

}

 

선생님 방법 - 문자열 더하기 미사용. 훨씬 간단

package Day04;

import java.util.Scanner;

public class Q2_T {
//8의 약수 구하기 선생님 답안
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        System.out.print("약수를 구할 숫자를 입력하세요: ");
        int num = scanner.nextInt();
        
        System.out.println(num + " 의 약수 : ");
        for(int i = 1; i<num; i++) { // num을 제외 => num까지 나와버리면 안 되지 
        	if (num % i == 0) {
        		System.out.print(i + ", "); // num을 제외한 약수 출력
        	}
        }
        System.out.println(num + " 입니다."); // 약수에 나머지 num 값을 출력함.
        
        
	}

}
728x90
Comments