반복문은 while, do-while, for 이 있다.
5-1. 반복문 시작
While1_1.java
package loop;
public class While1_1 {
public static void main(String[] args) {
int count = 0;
count = count + 1;
System.out.println("현재 숫자는:" + count);
count = count + 1;
System.out.println("현재 숫자는:" + count);
count = count + 1;
System.out.println("현재 숫자는:" + count);
}
}
- 특정 코드를 반복해서 실행할 때 사용하는 것이 반복문이다.
5-2. while문1
조건에 따라 코드를 반복해서 실행할 때 사용
while (조건식) {
// 코드
}
- 조건식이 참이면 코드 블럭을 실행하고, 거짓이면 while문을 벗어난다.
While1_2.java
package loop;
public class While1_2 {
public static void main(String[] args) {
int count = 0;
while (count < 3) {
count++;
System.out.println("현재 숫자는:" + count);
}
}
}
5-3. while문2
문제: i 부터 하나씩 증가하는 수를 3번까지 더해라 (i ~ i+2 더하기)
While2_1.java
package loop;
public class While2_1 {
public static void main(String[] args) {
int sum = 0;
sum = sum + 1; // sum(0) + 1 -> sum(1)
System.out.println("i=" + 1 + " sum=" + sum);
sum = sum + 2; // sum(1) + 2 -> sum(3)
System.out.println("i=" + 2 + " sum=" + sum);
sum = sum + 3; // sum(3) + 3 -> sum(6)
System.out.println("i=" + 3 + " sum=" + sum);
}
}
- 1부터 하나씩 증가하는 수를 3번 더해라
- 개선할 점이 많이 있는데, 무엇보다 변경에 유연하지 않다.
While2_2.java
package loop;
public class While2_2 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
sum = sum + i; // sum(0) + i(1) -> sum(1)
System.out.println("i=" + i + " sum=" + sum);
i++; // i=2
sum = sum + i; // sum(1) + i(2) -> sum(3)
System.out.println("i=" + i + " sum=" + sum);
i++; // i=3
sum = sum + i; // sum(3) + i(3) -> sum(6)
System.out.println("i=" + i + " sum=" + sum);
}
}
- 변수 i 를 사용한 덕분에 i 의 값만 변경하면 나머지 코드를 변경하지 않아도 된다.
- 변경 사항이 발생했을 때 변경해야 하는 부분이 적을수록 좋은 코드이다.
문제: i 부터 하나씩 증가하는 수를 endNum(마지막 수)까지 더해라 (i ~ endNum 더하기)
While2_3.java
package loop;
public class While2_3 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
int endNum = 3;
while (i <= endNum) {
sum = sum + 1;
System.out.println("i=" + i + " sum=" + sum);
i++;
}
}
}
- while 문을 사용하면 원하는 횟수 만큼 같은 코드를 반복 실행할 수 있다.
5-4. do-while문
조건에 상관없이 무조건 한 번은 코드를 실행
do {
// 코드
} while (조건식);
DoWhile1.java
package loop;
public class DoWhile1 {
public static void main(String[] args) {
int i = 10;
while (i < 3) {
System.out.println("현재 숫자는:" + i);
i++;
}
}
}
DoWhile2.java
package loop;
public class DoWhile2 {
public static void main(String[] args) {
int i = 10;
do {
System.out.println("현재 숫자는:" + i);
i++;
} while (i < 3);
}
}
5-5. break, continue
break: 반복문을 즉시 종료하고 나간다.
while(조건식) {
코드1;
break; // 즉시 while문 종료로 이동한다.
코드2;
}
//while문 종료
- break 를 만나면 코드2 가 실행되지 않고 while문이 종료된다.
continue: 반복문의 나머지 부분을 건너뛰고 다음 반복을 진행한다.
while(조건식) {
코드1;
continue; // 즉시 조건식으로 이동한다.
코드2;
}
- continue 를 만나면 코드2 가 실행되지 않고 다시 조건식으로 이동한다. 조건식이 참이면 while 문을 실행한다.
문제: 1부터 시작해서 숫자를 계속 누적해서 더하다가 합계가 10보다 처음으로 큰 값은 얼마인가?
Break1.java
package loop;
public class Break1 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while(true) {
sum = sum + i;
if (sum > 10) {
System.out.println("합이 10보다 크면 종료: i=" + i + " sum=" + sum);
break;
}
i++;
}
}
}
문제: 1부터 5까지 숫자를 출력하는데, 숫자가 3일 때는 출력을 건너뛰어야 한다.
Continue1.java
package loop;
public class Continue1 {
public static void main(String[] args) {
int i = 1;
while(i <= 5) {
if(i == 3){
i++;
continue;
}
System.out.println(i);
i++;
}
}
}
5-6. for문1
for문은 주로 반복횟수가 정해져 있을 때 사용
for (1.초기식; 2.조건식; 4.증감식) {
// 3.코드
}
for문은 다음 순서대로 실행된다.
- 초기식이 실행된다. 주로 반복 횟수와 관련된 변수를 선언하고 초기화할 때 사용한다. 초기식은 딱 1번 사용된다.
- 조건식을 검증한다. 참이면 코드를 실행하고, 거짓이면 for문을 빠져나간다.
- 코드를 실행한다.
- 코드가 종료되면 증감식을 실행한다. 주로 초기식에 넣은 반복 횟수와 관련된 변수의 값을 증가할 때 사용한다.
- 다시 2. 조건식부터 시작한다. (무한 반복)
For1.java
package loop;
public class For1 {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
System.out.println(i);
}
}
}
For2.java
package loop;
public class For2 {
public static void main(String[] args) {
int sum = 0;
int endNum = 3;
for (int i = 1; i <= endNum; i++) {
sum = sum + i;
System.out.println("i=" + i + " sum=" + sum);
}
}
}
for vs while
For2.java 코드
더보기
package loop;
public class For2 {
public static void main(String[] args) {
int sum = 0;
int endNum = 3;
for (int i = 1; i <= endNum; i++) {
sum = sum + i;
System.out.println("i=" + i + " sum=" + sum);
}
}
}
While2_3.java 코드
더보기
package loop;
public class While2_3 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
int endNum = 3;
while (i <= endNum) {
sum = sum + 1;
System.out.println("i=" + i + " sum=" + sum);
i++;
}
}
}
- for문은 초기화, 조건 검사, 반복 후 작업 등이 규칙적을 한줄에 모두 들어 있어 코드 이해가 쉬움
- 반복을 위해 값이 증가하는 카운터 변수(=인덱스 변수)를 다른 부분과 명확히 구분 가능
- for (int i = 1; i <= endNum; i++) 에서 변수 i 가 카운터 변수
- 덕분에 루프 횟수와 관련된 코드와 나머지 코드를 명확히 구분 가능
- while문은 변수 i 선언과 i++로 증가하는 코드가 분산되어 있다
5-7. for문2
for문에서 초기식, 조건식, 증감식은 선택이기에 모두 생략해도 된다. 조건없는 무한반복 코드가 된다.
for (;;) {
// 코드
}
문제: 1부터 시작하여 숫자를 계속 누적해서 더하다가 합계가 10보다 큰 처음 값은 얼마인가?
Break3.java
package loop;
public class Break3 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; ; i++) {
sum += i;
if (sum > 10) {
System.out.println("합이 10보다 크면 종료: i=" + i + " sum=" + sum);
break;
}
}
}
}
5-8. 중첩 반복문
반복문 내부에 또 반복문이 있는 것 (for 또는 while)
Nested1.java
package loop;
public class Nested1 {
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
System.out.println("외부 for 시작 i:" + i);
for (int j = 0; j < 3; j++) {
System.out.println("-> 내부 for " + i + "-" + j);
}
System.out.println("외부 for 종료 i:" + i);
System.out.println(); //라인 구분을 위해 실행
}
}
}
5-9. 문제와 풀이1
WhileEx1.java
package loop.ex;
public class WhileEx1 {
public static void main(String[] args) {
int count = 1;
while(count <= 10){
System.out.println(count);
count++;
}
}
}
ForEx1.java
package loop.ex;
public class ForEx1 {
public static void main(String[] args) {
for (int count = 1; count <= 10; count++) {
System.out.println(count);
}
}
}
WhileEx2.java
package loop.ex;
public class WhileEx2 {
public static void main(String[] args) {
int num = 1;
int count = 0;
while (true){
if(num % 2 == 0){
System.out.println(num);
count++;
}
if(count == 10){
break;
}
num++;
}
}
}
강의풀이
public class WhileEx2 {
public static void main(String[] args) {
int num = 2;
int count = 1;
while (count <= 10) {
System.out.println(num);
num += 2;
count++;
}
}
}
ForEx2.java
package loop.ex;
public class ForEx2 {
public static void main(String[] args) {
int num = 2;
for (int count = 1; count <= 10; count++) {
System.out.println(num);
num += 2;
}
}
}
강의풀이
public class ForEx2 {
public static void main(String[] args) {
for (int num = 2, count = 1; count <= 10; num += 2, count++) {
System.out.println(num);
}
}
}
WhileEx3.java
package loop.ex;
public class WhileEx3 {
public static void main(String[] args) {
int i = 1;
int max = 100;
int sum = 0;
while(i <= max) {
sum += i;
i++;
}
System.out.println(sum);
}
}
ForEx3.java
package loop.ex;
public class ForEx3 {
public static void main(String[] args) {
int max = 100;
int sum = 0;
for (int i = 1; i <= max; i++) {
sum += i;
}
System.out.println(sum);
}
}
5-10. 문제와 풀이2
NestedEx1.java
package loop.ex;
public class NestedEx1 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i+" * "+j+" = "+i*j);
}
}
}
}
NestedEx2.java
package loop.ex;
public class NestedEx2 {
public static void main(String[] args) {
int rows = 5;
for (int i = 0; i < rows; i++) {
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
'IT > 김영한의JAVA입문_inFlearn' 카테고리의 다른 글
7. 훈련 - Scanner / Scanner 기본 예제 / Scanner 반복 예제 / 문제와 풀이1~4 (2) | 2024.12.27 |
---|---|
6. 스코프, 형변화 - 지역 변수와 스코프 / 스코프 존재 이유 / 자동 형변환 / 명시적 형변환 / 계산과 형변환 (1) | 2024.12.27 |
4. 조건문 - if문1~3 / switch문 / 삼항 연산자 / 문제와 풀이1~2 (1) | 2024.12.24 |
3. 연산자 - 산술 연산자 / 문자열 더하기 / 연산자 우선순위 / 증감 연산자 / 비교 연산자 / 논리 연산자 / 대입 연산자 (1) | 2024.12.19 |
2. 변수 - 변수 시작 / 변수 값 변경 / 선언과 초기화 / 변수 타입 / 명명 규칙 / 문제와 풀이 (1) | 2024.12.04 |