[개발] - 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