Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
In Total
관리 메뉴

A Joyful AI Research Journey🌳😊

[26] 230204 Java Ch. 4 조건문과 반복문: 2. 반복문: for문, while문, do-while문 [K-디지털 트레이닝 26일] 본문

🌳Bootcamp Revision 2023✨/Spring Framework, Java

[26] 230204 Java Ch. 4 조건문과 반복문: 2. 반복문: for문, while문, do-while문 [K-디지털 트레이닝 26일]

yjyuwisely 2023. 2. 3. 12:50

230204 Fri 26th class

Ch. 4 조건문과 반복문
진도: p. 148 ~ (교재: 혼자 공부하는 자바, 저자: 신용권)

 

혼자 공부하는 자바 | 신용권 - 교보문고

혼자 공부하는 자바 | 혼자 해도 충분하다! 1:1 과외하듯 배우는 자바 프로그래밍 자습서 (JAVA 8 &11 지원) 이 책은 독학으로 자바를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도

product.kyobobook.co.kr

오늘 배운 것 중 기억할 것을 정리했다. 


지난 수업 때 배운 것 중 다시 기억할 것

sum += i; //sum = sum + i

+ 기호가 먼저 앞에 온다. 

int num1 = (int)(Math.random() * 6) + 1;

형태로 쓴다. 

출력함수: print() method in Java is used to display a text on the console. This text is passed as the parameter to this method in the form of String. This method prints the text on the console and the cursor remains at the end of the text at the console.


Ch. 4 조건문과 반복문

책의 목차
04-1 조건문: if문, switch문
04-2 반복문: for문, while문, do-while문

4.2 반복문: for문, while문, do-while문

1) for문 p. 149

for(초기화식; 조건식; 증감식){...}을 말하며 조건식이 true가 될 때까지만 중괄호 내부를 반복한다.
반복할 때마다 증감식이 실행된다. 초기화식은 조건식과 증감식에서 사용할 루프 카운터 변수를 초기화한다. 주로 지정된 횟수만큼 반복할 때 사용한다.

예제) 1부터 10까지 출력한다.

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

결과)

1
2
3
4
5
6
7
8
9
10

예제 2) 1부터 100까지의 합을 출력한다. 

public class P152ForSumFrom1To100Example2 {
	public static void main(String[] args) {
		int sum=0; //합계 변수
		int i = 0; //루프 카운터 변수 
		
		for(i = 1; i <= 100; i++) {
			sum += i;//sum = sum + i
		}
		System.out.println("1~" + (i-1) + "합 : " + sum);
	}
}

결과) 100번 반복이라 i = 101이 된다. 그러므로 i - 1 = 101 - 1 = 100이다. 

1~100합 : 5050

예제 3) float 타입 카운터 변수

public class P152ForFloatCounterExample {
	public static void main(String[] args) {
		for(float x = 0.1f; x <= 1.0f; x += 0.1f) {
			System.out.println(x);
		}
	}
}

결과) 0.1은 float 타입으로 정확하게 표현할 수 없이 때문에 루프 카운터 변수 x에 더해지는 실제 값은 0.1보다 약간 크다. 그러므로 루프는 9번만 실행된다. (1.0까지 도달하지 않는다.) 

0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

중첩 for문 p. 153

하나의 for 루프 안에 다른 for 루프가 내장될 수 있다. ex) 구구단표
루프가 중첩될 때는 루프 제어 변수로 서로 다른 변수를 사용해야한다. 

첫번째 for 루프가 반복되는 사이에 내부 for 루프도 그 수만큼 진행된다.
내부 for문(내부 반복문)이 끝나면 j변수는 소멸된다. (메모리에서 사라진다.)
외부 for문(외부 반복문)이 끝나면 i변수는 소멸된다. 

참고: 2023.01.11 - [1. Revision 2023/Javascript] - [11] 230111 Ch8 자바스크립트 기초(3)

예시)

public class P153Example {
	public static void main(String[] args) {
		for(int i = 1; i <= 2; i++) {
			System.out.println("i : " + i);
			for (int j = 1; j <=3; j++ ) {
				System.out.println("j (중첩 for문) : " + j);
		}
		}
	}
}

결과)

i : 1
j (중첩 for문) : 1
j (중첩 for문) : 2
j (중첩 for문) : 3
i : 2
j (중첩 for문) : 1
j (중첩 for문) : 2
j (중첩 for문) : 3

2) while문 p. 153


while(조건식){...}
을 말하며 조건식이 true가 될 때까지만 (조건식이 true일 경우에) 중괄호 내부를 반복 실행한다. (for문은 정해진 횟수만큼 반복한다.) 

for(int i = 1; i <= 10; i++){
		System.out.println(i);
}

위의 for문을 아래 while문으로 바꿀 수 있다.

int i = 1;
while(i <= 10){
	System.out.println(i);
	i++;}

조건식에 공식이 들어갈 수도 있고 true가 들어갈 수도 있다. 
while의 조건문이 true 이므로 조건문은 항상 참이 된다. while은 조건문이 참인 동안에 while에 속해 있는 문장들을 계속해서 수행하므로 위의 예는 무한하게 while문 내의 문장들을 수행할 것이다.
참고: https://wikidocs.net/212

while (true) {    
    <수행할 문장1>;
    <수행할 문장2>;
    ...
}

예제) 1부터 100까지의 합을 출력한다.

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

결과) 

1~100 합 : 5050

3) do-while문 p. 155

 do {...} while(조건식);을 말하며 먼저 do 중괄호 내부를 실행하고 그다음 조건식이 true가 되면 다시 중괄호 내부를 반복 실행한다. 
1. 블록 내부의 실행문을 우선 실행하고
2. 실행 결과에 따라서 반복 실행을 계속할지 결정한다. 
조건식의 결과가 true이면 실행문 → 조건식과 같이 반복 실행을 한다.
조건식의 결과가 false이면 do-while문을 종료한다. 

예시)

public class P156DoWhileExample {
	public static void main(String[] args) {
		int x = 5; 
		while (x < 1) {
			System.out.println("이건 while문");
		}
		do {
			System.out.println("이건 do while문"); //먼저 실행한다.
		} while (x < 1); //조건을 따진다. 조건식이 false일 경우 종료한다. 
	}
}

결과)

이건 do while문

4) break문 p. 156

for문, while문, do-while문 내부에서 실행되면 반복을 취소한다. 
실행을 중지할 때 사용된다.

예시) break로 while문 종료: 주사위 숫자가 6이면 while문을 종료한다. 
while(true)를 사용했다. 

public class P157BreakExample {
	public static void main(String[] args) {
		while(true) {
			int num = (int) (Math.random()*6) + 1;//1~6까지의 임의의 숫자를 num변수에 저장한다.
			System.out.println(num);//무한대로 1~6까지 숫자를 출력한다.
			//만약 임의의 숫자가 6이면
			if(num == 6) {
				//무한반복을 멈춘다.
				break;
			}
		}
		System.out.println("프로그램 종료");
	}
}

결과) 

3
3
1
3
5
2
5
2
3
3
6
프로그램 종료

이름 붙은 반복문 (Labeled Loop) Label: for, break Label; p. 157

만약 반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료하지 않는다. 
중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름(라벨)을 붙이고, 'break 이름;'을 사용한다. 

Label: for (...) {
	for (...) {
    	break Label;
	}
}

예제) 바깥쪽 반복문 종료
중첩된 for문에서 lower 변수가 'g'를 갖게 되면 바깥쪽 for문까지 빠져나온다.

public class P158BreakOutterExample {
	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;
				}//if문 끝
			}//내부 for 끝
		}//외부 for 끝
	System.out.println("프로그램 실행 종료");
	}
}

결과)

A-a
A-b
A-c
A-d
A-e
A-f
A-g
프로그램 실행 종료

5) continue문 p. 158

continue문은 블록 내부에서 continue문이 실행되면 for 문의 증감식
또는 while문, do-while문의 조건식으로 이동한다. 

반복문을 종료하지 않고 계속 반복을 수행한다.

break문과 마찬가지로 continue문도 대개 if문과 같이 사용되는데, 
특정 조건을 만족하는 경우에 continue문을 실행해서 그 이후의 문장을 실행하지 않고 다음 반복으로 넘어간다. 

예시)

public class P159ContinueExample {
	public static void main(String[] args) {
		for(int i = 1; i <= 10; i++) {
			//만약에 숫자가 홀수이면
			if(i%2 != 0) {
				continue;//스킵
			}
			System.out.println(i);
		}
	}
}

결과) 

2
4
6
8
10

5가지 키워드로 끝내는 핵심 포인트 p. 160

조건식이 거짓이 되면 반복문은 멈춘다. 또는 continue문일 때 (건너 뛴다.)

1) for문: for(초기화식; 조건식; 증감식){...}을 말하며 조건식이 true가 될 때까지만 중괄호 내부를 반복한다.
반복할 때마다 증감식이 실행된다. 초기화식은 조건식과 증감식에서 사용할 루프 카운터 변수를 초기화한다. 주로 지정된 횟수만큼 반복할 때 사용한다. 

2) while문: while(조건식){...}을 말하며 조건식이 true가 될 때까지만 중괄호 내부를 반복 실행한다.

3) do-while문: do {...} while(조건식);을 말하며 먼저 do 중괄호 내부를 실행하고 그다음 조건식이 true가 되면 다시 중괄호 내부를 반복 실행한다. 

4) break문: for문, while문, do-while문 내부에서 실행되면 반복을 취소한다.

5) continue문: for문, while문, do-while문 내부에서 실행되면 증감식 또는 조건식으로 돌아간다.


확인 문제

Q2) 1~100 정수 중 3의 배수의 총합 구하기
예제)

public class P160Q2 {
	public static void main(String[] args) {
		int i = 0;
		int sum = 0;
		for (i=1; i<=33; i++) {
			sum += 3*i;
		}
		System.out.println(sum);
	}
}

교재의 정답)

public class P160Q2 {
	public static void main(String[] args) {
		int i = 0;
		int sum = 0;
		for (i=1; i<=100; i++) {
			if (i%3==0) {
			sum += i;
		}
	}
		System.out.println(sum);
}
}

결과)

1683

Q3) 2개 주사위 눈의 합이 5가 아니면 계속 주사위를 던지고 5면 실행을 멈춘다.
예제) while(true) 사용

public class P161Q3 {
	public static void main(String[] args) {
		while (true) {	
		int num1 = (int)(Math.random() * 6) + 1;
		int num2 = (int)(Math.random() * 6) + 1;
		System.out.println("("+num1+","+num2+")");
		if (num1+num2==5) {
			break;
		}
		}
		System.out.println("프로그램 종료");
	}
}


예제) if 사용

public class P161Q3 {
	public static void main(String[] args) {
		while(true) {
		int num1 = (int)(Math.random() * 6) + 1;
		int num2 = (int)(Math.random() * 6) + 1;
		System.out.println("("+num1+","+num2+")");
		if (num1 + num2 == 5) {	
			break;
		}
	}
		System.out.println("프로그램 종료");
}
}

결과)

(2,1)
(2,5)
(2,1)
(1,1)
(2,6)
(5,5)
(3,4)
(2,1)
(4,1)
프로그램 종료

Q4) 중첩 for문 이용하여 방정식 4x + 5y = 60의 모든 해를 (x, y) 형태로 구하시오.

예제)

public class P161Q4 {
	public static void main(String[] args) {
		int x = 0;
		int y = 0;
		
		for (x=1; x<=10; x++) {
			for (y=1; y<=10; y++) {
				if (4*x+5*y == 60) {
					System.out.println("("+x+","+y+")");
				}
			}
		}
	}
}

결과)

(5,8)
(10,4)

Q5) for문을 이용해서 * 출력 코드 작성 (*   , **  , *** , ****)

예제) 

public class P161Q5 {
	public static void main(String[] args) {
		for (int i=1; i<5; i++) {
			for (int j=1; j<=i; j++) {
				System.out.println("*");
		if(j==i) {
			System.out.println("");
			}
		}
	}
}
}

결과) 원리는 j <= i일 경우 *를 출력 한다. 그 외는 공백(space)을 출력한다.
[1___] <=1
[1,2__] <=2
[1,2,3_] <=3
[1,2,3,4] <=4 
이므로 결과처럼 출력된다.

 i 1 2 3 4
j [1,2,3,4] [1,2,3,4] [1,2,3,4] [1,2,3,4]
j <= i (* 출력) [1,2,3,4] [1,2,3,4] [1,2,3,4] [1,2,3,4]
결과 [*___] [**__] [***_] [****]
*

*
*

*
*
*

*
*
*
*

Q6) for문을 이용해서 * 출력 코드 작성 (    *,  **, ***, ****)

예제) 

public class P161Q6 {
	public static void main(String[] args) {
		for (int i=1; i<5; i++) {
			for (int j=4; 0<j; j--) {
				if (i < j) {
				System.out.println("");
				}else{
			System.out.println("*");
			}
		}
		System.out.println();
	}
}
}

결과) 원리는 i < j일 경우 공백을 출력한다. 그 외는 *를 출력한다.

 i 1 2 3 4
j [4,3,2,1] [4,3,2,1] [4,3,2,1] [4,3,2,1]
i < j (공백 출력) [4,3,2,1] [4,3,2,1] [4,3,2,1] [4,3,2,1]
결과 [___*] [__**] [_***] [****]

 

*



*
*


*
*
*

*
*
*
*

Q7) 예금, 출금, 조회, 종료 인출 기능

예제)
몰랐던 것:
swtich()안에 새로운 menuNum 변수를 넣어야한다. 
scanner.nextLine()
을 사용한다. 

int menuNum = Integer.parseInt(scanner.nextLine());

default에서 run = false;로 바꿔야한다. 

import java.util.Scanner;
public class P161P7 {
	public static void main(String[] args) {
		boolean run = true; 
		int balance = 0; //잔고
		Scanner scanner = new Scanner(System.in);
		while(run) {
			System.out.println("-----------------------");
			System.out.println("1.예금|2.출금|3.잔고|4.종료");
			System.out.println("-----------------------");
			System.out.println("선택>");
			
			int menuNum = Integer.parseInt(scanner.nextLine());
			switch (menuNum) {
			case 1:
				System.out.println("예금액> ");
				balance += Integer.parseInt(scanner.nextLine());
				break;
			case 2:
				System.out.println("출금액> ");
				balance -= Integer.parseInt(scanner.nextLine());
				break;	
			case 3:
				System.out.println("잔고> ");
				System.out.println(balance);
				break;	
			case 4:
				run=false;
				break;	
			}
			System.out.println(); //엔터 효과
		}
		System.out.println("프로그램 종료");
	}
}

결과)

-----------------------
1.예금|2.출금|3.잔고|4.종료
-----------------------
선택>
1
예금액> 
10000

-----------------------
1.예금|2.출금|3.잔고|4.종료
-----------------------
선택>
2
출금액> 
3000

-----------------------
1.예금|2.출금|3.잔고|4.종료
-----------------------
선택>
3
잔고> 
7000

-----------------------
1.예금|2.출금|3.잔고|4.종료
-----------------------
선택>
4

프로그램 종료

 

728x90
반응형
Comments