Programming Language/JAVA (2) - 혼공자

[Java 혼자 공부하는 자바] for문, while문, do-while문, break문, continue문

나수비니 2023. 9. 23. 01:20
728x90

핵심 키워드

  • for 문, while문, do-while문, break문, continue문

핵심 포인트

  • 반복문
    • for, while, do-while
    • 반복문은 제어문 처음으로 되돌아가 반복실행 ⇒ **루핑(loopng)**이라고 한다.
    • 어떤 작업을 반복적으로 실행하고 싶을 때 사용

for문

  • 주어진 횟수 만큼 반복 횟수를 알고 있을 때 주로 사용
for ( 초기화식; 조건식; 증감식) {
int sum = 0;
for (int i=1; i<=100; i++) {
	sum = sum+i;
}
	System.out.println("1~100의 합:" + sum);

🟡 코드 뜯기

  1. int i =1
    1. 반복을 1부터 하겠다.
  2. i < = 100
    1. i가 100 이하일 때 까지 반복하겠다.
  3. i++
    1. 한 번 씩 반복할 때마다 i가 얼만큼 증가할건지?

 

1부터 10까지 증가

package sec02.exam01;

public class ForPrintFrom1To10Examp {

	public static void main(String[] args) {
		
		for(int i =1; i<=10; i++) {
			System.out.println(i);
		}
	}
}

 

1부터 100까지 증가

//1부터 100까지 합 구하기 for
package sec02.exam02;

public class ForSumFrom1To100Example {

	public static void main(String[] args) {
		
		int sum = 0; //합을 저장할 sum 이라는 변수 저장하고, 0 저장
		
		for (int i = 1; i<=100; i++) {
			sum += i; // sum 이라는 변수에 복합대입연산자 사용해서 i라는 변수를 계속 누적
			}
		System.out.println("1~100합" + sum );
	}
}

🔺 문제점

  1. int sum = 0; //합을 저장할 sum 이라는 변수 저장하고, 0 저장
    • 합을 구해야하기에 합을 나타낼 변수 설정을 안 했다. 바로 for문을 작성해 버렸다.
  2. for (int i = 1; i<=100; i++) { sum += i;
    • for 문은 잘 작성을 했으나, sum += i;를 작성을 안 했다.
      • 왜? .. sum 이라는 변수에 복합대입연산자를 사용해서 i라는 변수를 계속 누적해줘야한다.
  3. 출력값
    1. “1~100합: 5050”이 정답인데, 난 아래 사진처럼 뜬다.
    2. 절대 챗GPT 돌리지 말고 혼자 답 찾아낼 것 지금 당장.
    3. 해결 → 어처구니없는 실수를 했다. System.***out***.println("1~100의 합:" + sum);를 for문 중괄호 안에 입력했다.
    4. "1~100합"
      1. 100 자리에 ‘i’ 변수를 사용할 수 없을지? → 컴파일 오류가 발생함.

잘못 작성된 for문의 예시

//잘못 작성된 for 문의 예시
package sec02.exam04;

public class ForFloatCounterExample {

	public static void main(String[] args) {
		for(float x=0.1f; x<=1.0f; x+=0.1f) {
			//x가 한 번씩 반복될 때마다 x에 0.1f를 추가하고 1.0f가 되면 종료
			//0.7부터는 x가 0.7보다 큰 수 되어버림
			//0.9000001 이후에는 x가 1보다 커져버림
			//그래서 10번이 아닌 9번만 반복됨
			//for문 작성 시 정수타입으로 선언할 것.
			System.out.println(x);
		}
	}
}

🟡 코드 뜯기

  1. x가 1회씩 반복될 때 마다, x에 0.1f를 더해라 → x가 1.0f가 되면 종료해라
  2. 0.7부터는 x가 0.7보다 큰 수가 됨 → 0.9000001 이후에는 x가 1보다 커짐 ⇒ 9회 반복
    1. 왜? ⇒ x에 0.1이 추가될 때 정확히 0.1이 더해지는 것이 아님
  3. for문 작성 시, 정수 타입으로 선언할 것

 

중첩 for문

package sec02.exam05;

public class ForMultiplicationTableExample {

	public static void main(String[] args) {
		for (int m=2; m<=9; m++) {
			System.out.println("*** " + m + "단 ***");
										//m=2은 2인데.1회씩 반복될 때 마다 m에 1씩 더해라
										//m이 0보다 작아지면 중지해라 -> 말이 됨? 양수에서 1을 더하는데 어떻게 음수가 돼?
		for (int n=1; n<=9; n++) {
			System.out.println( m + " x " + + n + " = " + (m*n));
//			n은 1인데, 1회씩 반복될 때마다 1씩 더해라. n이 9가 되면 종료해라	
			}
		}
	}
}
  • 중첩 for문
    • for문은 또 다른 for문을 내포할 수 있다.

🟡 코드 뜯기

  1. for (int m=2; m<=0; m++) {
    1. m은 2이다, m이 9 이하일 때까지 반복, 1회씩 반복될 때 마다, m에 1을 더해라
  2. for (int n=1; n<=9; n++) {
    1. n은 1이다, n이 9 이하일 때까지 반복, 1회씩 반복될 때 마다, n에 1을 더해라
  3. 바깥쪽 for문&중첩 for문의 기능
    1. 바깥쪽 for문: m이 2~9까지 변하면서 8번 반복 실행
    2. 바깥쪽의 for문이 1번 실행될 때 → 중첩 for문: n은 1~9까지 변하면서 9번 반복 실행
    3. 즉, m=2일 때 n은 1~9까지 변하면서 2 x n = 2*n을 출력

🔺 문제점

  1. m이 0보다 작아지면 중지 → m은 2로 시작했고, 반복될 때 마다 1을 더하라고 했는데 0보다 작아질 수가 있나?
    1. 9를 0으로 착각했다.. 눈이 멀어가나? 밤을 새지말자..

 

while문

  • 조건에 따라 반복할 때
package sec02.exam06;

public class WhilePrintFrom1To10Example {

	public static void main(String[] args) {
		int i = 1;
		while(i<=10) {
			System.out.println(i);
			i++;
		}
	}
}
package sec02.exam07;

public class WhileSumFrom1To100Example {

	public static void main(String[] args) {
		int sum = 0;
		int i = 1;
		
		while(sum<=100) {
			sum += 101;
			i++;
		}
		System.out.println("1~" + (i-1) + " 합: " + sum );
	}
}
package sec02.exam08;

public class BreakExample {

	public static void main(String[] args) {
		while(true) {
			int num = (int)(Math.random()*6) + 1;
			System.out.println(num);
			if(num == 6) {
				break;
			}
		}
		System.out.println("프로그램 종료");	
	}
}
package sec02.exam09;

public class BreakOutterExample {

	public static void main(String[] args) {
		Outter:
		for(char upper='A'; upper<='Z'; upper++) {
			for(char lower='a'; lower<='z'; lower++) {
				System.out.println(upper + "-" + lower);
				if(lower == 'g') {
					break Outter;
					//A가 Z가 될 때까지 1씩 더해라
					//a가 z가 될 때까지 1씩 더해라
					//출력해라
					//만약 lower가 g가 되면 빠져나와라
					//중첩 for문이니까.. A가 1번 실행할 때
					//중첩 for 문은 a~z까지 실행되니까
					//A에서 g까지 갔을때만 출력되는 것임
				}
				
			}
		}	
	}
}

 

 

Continue문

  • for, While, do-while문에서만 사용
  • for문의 증감식이나 while, do-while 문의 조건식으로 사용
  • 주로 if문과 함께 사용
  • Continue문 예제

 

package sec02.exam10;

public class CountinueExample {

	public static void main(String[] args) {
		for(int i=1; i<=10; i++) {
			if(i%2 != 0) {
				continue;
			}
			System.out.println(i);
		}
	}
}
//i는 1이고, 1씩 더해서 10이 될때까지 반복해라
//i를 2로 나눴을 때 0이 아니면 돌아가라
//1%2 0이아니니까 돌아가
//2%2 0이니까 출력해

 


💡 인사이트

- 수만가지의 논리 구조가 떠오르는데 이를 깔끔하게 적절한 문법을 사용해서 코드로 구현해내는 것

- 재능이 필요한 영역인가 익숙해지면 되는건가

- 일단 몸에 체화시키는 게 중요한 것 같다

- 한 번 보고 내 나름대로 따라칠 수 있으면 가능성 걸어봐도 되나

- 고작 for문 코드 안 보고 쳐보겠다고 혼자 골머리 앓았다. 의욕도 식어버린다. 나 왜 이러냐

- 그냥, 안 되면 되게 해..