6. 반복문

Isaiah IM·2023년 1월 19일
0

java basic

목록 보기
7/38
post-thumbnail

1. 반복문이란?

반복문이란 일정한 조건이 만족할 때 까지 특정 코드들을 반복하는 문법이다.

예를들어 보자.
우리가 1부터 10까지 더하는 수를 구하는 프로그램을 만든다고 가정하자.
우리가 지금까지 배운 내용들로는 이렇게 작성할 수 있을 것이다.

int sum;
sum=1+2+3+4+5+6+7+8+9+10;

그런데 만약 더하는 숫자가 1부터 1000까지라면 어떠한가? 벌써부터 머리가 아프지 않은가? 어느 세월에 1부터 하나하나 다 더하고 있겠는가?
만약 더하는 것에 일정한 규칙만 있다면 그 규칙에 따라 컴퓨터가 예측해서 알아서 다 더하는 기능이 있다면 얼마나 편리하겠는가?
바로 이러한 기능이 바로 반복문이다.

반복문을 사용하면 우리는 반복되는 규칙을 찾아서 규칙과 함께 반복할 코드만 입력하면 컴퓨터는 알아서 반복되는 규칙에 따라 코드를 실행해 준다.

즉, 1부터 1000까지 더하는 코드의 규칙만 찾으면 반복문을 통해 우리가 일일히 입력하지 않아도 1부터 1000까지 알아서 더해주는 코드를 작성할 수 있다. 물론, 규칙만 찾는다면 1부터 100000까지 숫자를 더하는것도, 그 중에서 홀수만 더하는 것도 가능한 것이다.

이러한 반복문의 종류는 while 반복문, do-while 반복문, for 반복문이 있으며, 각각의 특징이 있어 특징에 따라 사용할 수 있다.


2. while 반복문

while 반복문은 조건에 따른 코드를 반복해서 실행하는 반복문이다.

while 반복문의 경우 특정한 조건이 만족할 때 반복문을 실행하는 코드로 다음과 같이 작성한다.

 while(condition){// condition이 true일때 code 반복실행
 ...// code
 }

주석에 적혀진 바와 같이 conditiontrue 일 경우 code 전체를 반복한다. 즉, condition에는 if 조건문에 들어간 것과 같은 형식의 조건을 condition에 입력하면 된다.

보다 쉬운 이해를 위해 간단한 코드를 설계해보자.
1에서 5까지 더하는 프로그램을 while 반복문을 이용해 만들어보자.

먼저, 1부터 5까지 더하는 값이 저장되는 변수와, 1부터 5까지 숫자를 세는 변수가 필요할 것이다. 이때, 필자는 숫자를 세는 변수를 cnt라고 하고, 1부터 5까지 더한 값이 저장되는 변수를 sum이라 하겠다.
또한, 초기값의 경우 cnt의 경우 1부터 세야 하므로 초깃값을 1, sum의 경우에는 0부터 값을 더해야 하기 때문에(0+1+2+3+4+5) 초깃값을 0으로 설정을 한다.

지금까지의 내용으 코드로 작성하면 다음과 같다.

public class While {
	public static void main(String[] args) {
		
		int cnt=1;
		int sum=0;
	}
}

이제 반복문을 작성하면 된다. 1부터 5까지 더하는 것이 목적이므로 더하는 숫자를 세는 cnt가 5보다 크면 5보다 큰 수까지 더하는 것이 되므로 조건을 cnt<=5로 설정한다.

지금까지의 내용을 코드로 작성하면 다움과 같다.

public class While {
	public static void main(String[] args) {
		
		int cnt=1;
		int sum=0;
		
		while(cnt<=5) {// 1부터 5까지 더하는 반복문
			
		}
	}
}

마지막으로, 1부터 5까지 세는cnt와 이 수들을 더하는 sum을 서로 더한다.
그 다음으로, 다음 숫자를 세기 위해 cnt를 1 증가시킨다.
그 다음으로, 잘 더해졌는지 결과를 출력한다.

지금까지의 내용을 코드로 작성하면 다움과 같다.

public class While {
	public static void main(String[] args) {
		
		int cnt=1;
		int sum=0;
		
		while(cnt<=5) {
			sum+=cnt;// sum=sum+cnt랑 동일
			cnt++;// cnt 1 증가
		}
		
		System.out.println("sum: "+ sum);// 결과값 출력
	}
}

output

sum: 15

이때, cnt를 증가하는 등의 반복문이 끝나는 조건인 종료조건을 작성하지 않을 경우 반복문이 종료되지 않는 무한루프에 빠질 수 있으므로 반드시 종료조건을 작성해야 한다.


3. do-while 반복문

do-while 반복문은 while 반복문과 유사하나, 한번 코드를 실행한 후 조건을 비교한다.

do-while반복문의 경우 while 반복문과 유사하나, while 반복문의 경우 먼저 조건이 true일때 반복을 실행하나, do-while 반복문의 경우, 먼저 한번 반복을 실행하고 이후에 조건을 비교한다.

한번 비교해보자.
아래 반복문은 실행이 되는가?

public class While {
	public static void main(String[] args) {
		
		boolean condition=false;
		
		while(condition) {
			System.out.println("while loop");
		}
		
	}
}

정답은 실행이 되지 않는다. 왜냐하면 condition이 false이기 때문이다. 즉, while 반복문은 반복하기 전에 조건이 true일 경우에만 실행이 된다.

그러나, do-while 반복문은 조금 다르다.
아래 코드를 한번 실행해 보자.

public class DoWhile {
	public static void main(String[] args) {
		
		boolean condition=false;
		
		do{
			System.out.println("do-while loop");
		} while(condition);
		
	}
}

output

do-while loop

코드를 실행하면 알 수 있듯이 한번 반복문이 실행됨을 알 수 있다. 즉, do-while문의 경우 먼저 한번 반복한 이후, 조건에 따라 더 반복할지의 여부를 결정하게 된다.


4. for 반복문

for 반복문의 경우 초깃값과 조건값, 증감값을 통해 횟수가 정해진 반복문을 실행한다.

for 반복문의 경우 기존 반복문과 다르게 반복을 시작하는 초깃값과 반복하는 조건값, 값을 증감시키면서 반복 횟수를 조절하는 증감값이 들어간다. 이러한 for 반복문은 다음과 같이 작성한다.

for(초기값; 조건값; 증갑값){
...// code
}

보다 쉬운 이해를 위해 코드를 설계하면서 알아보자.
1부터 5까지 더하는 코드를 for 반복문으로 작성해보자.

먼저 while 반복문에서 했던 것과 동일하게 1부터 5까지 증가하면서 숫자를 세는 변수와 이 수를 더하는 변수가 필요하다.
이때, 필자는 숫자를 세는 변수를 i라고 정의하겠다. 그리고 수를 더하는 변수는 동일하게 sum이라고 정의하겠다.

지금까지의 내용을 코드로 나타내면 다음과 같다.

public class For {
	public static void main(String[] args) {
		
		int i, sum;
		
	}
}

다음으로는 for 반복문을 작성하면 된다.
먼저 초깃값을 설정하자.
먼저 i의 경우 1부터 시작하므로, i=1이 되며, sum의 경우 0부터 더해야 하므로 sum=0이 된다.
그 다음으로 반복조건은 i가 5보다 크면 안되므로 i<=5라고 설정한다.
마지막으로 증감값의 경우 값을 i를 1씩 증가시키므로 i++으로 설정한다.
이를 for문으로 만들어 코드를 작성하면 다음과 같다.

public class For {
	public static void main(String[] args) {
		
		int i, sum;
		
		for(i=1, sum=0; i<=5; i++) {
		}
	}
}

마지막으로 반복되는 동안 sum값과 i값을 더하고, 결과를 출력하는 코드를 작성하면 다음과 같다.

public class For {
	public static void main(String[] args) {
		
		int i, sum;
		
		for(i=1, sum=0; i<=5; i++) {
			sum+=i;
		}
		
		System.out.println("sum: "+ sum);
	}
}

output

sum: 15

이때, for 반복문에서 초깃값이 여러개일 경우 가독성이 떨어질 수 있으므로, 코드를 정리하면 다음과 같다.

public class For {
	public static void main(String[] args) {
		
		int i, sum=0;// sum 초깂값=0
		
		for(i=1; i<=5; i++) {
			sum+=i;
		}
		
		System.out.println("sum: "+ sum);
	}
}

output

sum: 15

5. 실습

  • Q1

    1부터 100까지 정수중에서 홀수만 더하는 프로그램을 do-while 반복문으로 작성하시오.

  • Q2

    1부터 100까지 더한 수와 3부터 33까지 더한 수를 뺀 값을 구하는 프로그램을 각각 for 반복문과 while 반복문으로 작성하시오.

  • Q3

    1부터 1000까지 정수중에서 3으로 나누어 떨어지는 숫자의 갯수를 구하는 프로그램을 작성하시오.


  • A1

code

public class Q1 {
	public static void main(String[] args) {
		int cnt=1;
		int sum=0;
		
		do {
			if(cnt%2==1) {
				sum+=cnt;
			}
			
			cnt++;
		} while(cnt<=100);
		
		System.out.println("odd sum: "+ sum);
	}
}

output

odd sum: 2500
  • A2

  • for문

code

public class Q2_For {
	public static void main(String[] args) {
		int sum1, sum2, result;
		int i;
		
		sum1=0;
		sum2=0;
		
		/*1~100 sum*/
		for(i=1; i<=100; i++) {
			sum1+=i;
		}
		
		/*3~33 sum*/
		for(i=3; i<=33; i++) {
			sum2+=i;
		}
		
		result=sum1-sum2;
		
		System.out.println("sum: "+ result);
	}
}

output

sum: 4492
  • while문

code

public class Q2_While {
	public static void main(String[] args) {
		
		int sum1, sum2, result;
		int cnt;
		
		sum1=0;
		sum2=0;
		
		/*1~100 sum*/
		cnt=1;
		while(cnt<=100) {
			sum1+=cnt;
			cnt++;
		}
		
		/*3~33 sum*/
		cnt=3;
		while(cnt<=33) {
			sum2+=cnt;
			cnt++;
		}
		
		result=sum1-sum2;
		
		System.out.println("sum: "+ result);
	}
}

output

sum: 4492
  • A3

code

public class Q3 {
	public static void main(String[] args) {
		int cnt=0;
		
		for(int i=1; i<=1000; i++) {// 1부터 1000까지 반복
			if(i%3==0) {// 3으로 나누어 떨어지는 수
				cnt++;
			}
		}
		
		System.out.println("result: "+ cnt);
	}
}

output

result: 333

위 주소에서 code를 다운로드 받아 eclipse로 직접 정답 확인이 가능하다.
https://github.com/isaiahIM/java_basic/tree/main/loop%20statement

profile
나는 생각한다. 고로 나는 코딩한다.

0개의 댓글