특정 코드를 반복해서 실행할 때 사용
while , do-while , for
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);
}
}
}
<While2_1.java>
package loop;
public class While2_1 {
public static void main(String[] args) {
int sum =0;
int i = 1;
int endNum =3;
while(i<=endNum){
sum = sum +i;
System.out.println("i="+i+" sum="+sum);
i++;
}
}
}
=> 코드가 실행되는 횟수를 유연하게 변경할 수 있어야 한다. 한마디로 같은 코드를 반복 실행할 수 있어야 한다.
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++;
}
}
}
=> i=10 이기 때문에 아무것도 출력되지 않는다.
<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);
}
}
=> 현재숫자는: 10 한번만 실행되고 i<3 조건에 맞지 않기 때문에 do-while 문을 빠져나오게 된다.
break는 반복문을 종료하고 즉시 나간다.
continue는 반복문의 나머지 부분을 건너뛰고 다음 반복을 진행하는데 사용한다.
break
while(조건식) {
코드1;
break;//즉시 while문 종료로 이동한다.
코드2;
}
=> 코드 2가 실행되지 않고 while문 종료된다.
continue
while(조건식) {
코드1;
continue;//즉시 조건식으로 이동한다.
코드2;
}
=> 코드2가 실행되지 않고 다시 조건식으로 이동한다. 조건식이 참이면 while문이 실행된다.
<Break1.java>
package loop;
public class Break1 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (true) { //조건이 항상 참이기 때문에 무한반복
sum += i;
if (sum > 10) {
System.out.println("합이 10보다 크면 종료: i=" + i + " sum=" + sum);
break; //빠져나오기
}
i++;
}
}
}
<결과>
<Continue1.java>
package loop;
public class Continue1 {
public static void main(String[] args) {
int i = 1;
while (i <= 5) {
if (i == 3) {
i++;
continue; // i를 하나 증가하고 continue, sout 실행하지 않고 바로 while문으로 이동
}
System.out.println(i);
i++;
}
}
}
<결과>
for문은 주로 반복 횟수가 정해져 있을 때 사용한다.
for (1.초기식; 2.조건식; 4.증감식) {
// 3.코드
}
- 초기식이 실행된다. 주로 반복 횟수와 관련된 변수를 선언하고 초기화 할 때 사용한다. 초기식은 딱 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=0; i<=endNum; i++){
sum = sum+i;
System.out.println("sum : "+ sum);
}
}
}
for (초기식; 조건식; 증감식) {
// 코드
}
=> for 문에서 초기식, 조건식, 증감식은 선택이고 생략이 가능하지만 세미콜론은 유지해야한다.
for (;;) {
// 코드
}
=> 무한반복
while (true) {
// 코드
}
=> 무한반복
<Break2.java>
package loop;
public class Break2 {
public static void main(String[] args) {
int sum =0;
for (int i=0; ;i++){
sum +=i;
if(sum>10){
System.out.println("10보다 큼 : "+ i + " sum : "+sum);
break;
}
}
}
}
<결과>
<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(); //라인 구분을 위해 실행
}
}
}
<결과>
<WhileEx1.java>
package loop.ex;
public class WhileEx1 {
public static void main(String[] args) {
//while
// int count = 1;
//
// while(count<=10){
// System.out.println(count);
// count++;
// }
//for
for(int i=1; i<=10;i++){
System.out.println(i);
}
}
}
<WhileEx2.java>
package loop.ex;
public class WhileEx2 {
public static void main(String[] args) {
//while
// int num =1;
// while (num<=10){
// System.out.println(num*2);
// num++;
// }
//
//for
for(int num=1; num<=10; num++){
System.out.println(num*2);
}
}
}
<WhileEx3.java>
package loop.ex;
public class WhileEx3 {
public static void main(String[] args) {
//while
// int max =5;
// int sum =0;
// int i =1;
//
// while(i <=max){
// sum +=i;
// System.out.println("i : "+i+ " sum : "+sum);
// i++;
// }
//for
int max=5;
int sum=0;
for(int i=1;i<=max;i++){
sum +=i;
System.out.println("i : "+i+ " sum : "+sum);
}
}
}
<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+"X"+j+"="+i*j);
}
}
}
}
<NestedEx2.java>
package loop.ex;
public class NestedEx2 {
public static void main(String[] args) {
int rows = 5;
for(int i = 1; i <= rows; i++) {
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}