[Java] 반복문 ( for / while )

Junseo Kim·2019년 12월 17일
3

[Java]자바 기초

목록 보기
7/35

반복문

코드를 자동으로 반복시켜주는 것

반복문의 종류

1) for
2) while(do while 포함)

for문

<기본형태>

for(int i=0 ; i<10 ; i++) {
   //조건이 참일 경우 for문 내부 실행 
}
  • int i = 0 //나를 도와주는 변수 정의
  • i<10 //조건
  • i++ //나를 도와주는 변수 업데이트

for문은 조건 검사 후 참일경우 for문 내부를 실행하고 다시 돌아와서 조건을 검사한다. 조건이 거짓이 될때까지 반복해준다.

for문 안에서 정의된 변수는 for문이 끝나면 메모리에서 사라진다.

Tip) for문 무한루프
조건을 true로 바꾸거나, 모두 비워주면 된다. 즉 조건만 참이 만족되면 무한루프가 된다.

for(int i=0 ; true ; i++) {
	System.out.println("i는: "+i);
}
for( ; ; ) {
	System.out.println("hi");		
}

무한루프를 탈출하려면, if 문으로 특정조건을 걸어주면 된다.
break; 를 해주면 루프문을 종료시켜준다.

다중 for문

반복을 반복하고 싶을때 사용(ex 구구단)

<기본형태>

for(int i=0;i<10;i++) {
	for(int j=0;j<10;j++) {
		System.out.print(j); //실행할 구문 
	}
}

for문 안의 for문에는 같은 기준 값을 쓸 수 없다. (int i 를 바깥 for문에서 사용했으므로 안쪽 for문은 다른 값을 사용해야한다)

안쪽 for문에서 사용된 int j는 안쪽 for문이 실행 될때마다 새로 메모리 할당을 받는다(한번 반복해서 출력한 후에 버려지고 다시 바깥 for문에 의해 호출될 시 새로 할당받는다)

이중 for문을 이용하여 구구단 출력해보기

Tip) 다중 for문으로 삼각형 그리기

package repeatpackage;

import java.util.Scanner;

public class repeat_for2 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("삼각형의 높이를 입력해주세요. ");
		int height = sc.nextInt();
		
		//직각 삼각형 
		for(int i=1;i<=height;i++) {
			for(int j=1;j<=i;j++) {
				System.out.print("*"); 
			}
			System.out.println(""); //줄바꿈 
		}
		
		System.out.println(""); //줄바꿈 
		
		//이등변삼각형
		for(int i=1;i<=height;i++) {
			for(int j=1;j<=height-i;j++) {
				System.out.print(" "); 
			}
			for(int j=1;j<=i;j++) {
				System.out.print("*"); 
			}
			for(int j=1;j<i;j++) {
				System.out.print("*"); 
			}
			System.out.println(""); //줄바꿈 
		}
	}
}

while문

for문이랑 거의 비슷하지만 문법이 살짝 다르다.

<기본형태>

int i=0 //도와주는 변수 선언 
while(i<10){ //괄호 안에 조건 넣어주기 
   i++ //도와주는 변수 업데이트
}

Tip) 위의 while문 기본형태를 for문으로 바꿔주면, 아래와같다.

for(int i=0;i<10;i++){

}

Tip) while문 무한루프

while(true){
   //무한루프 
}

Tip) for문과 while문의 차이점

for문은 도와주는 변수가 선언 후 for문이 끝나면 도와주는 변수가 사라지는 반면에 while문은 while문 위에 도와주는 변수를 선언하기 때문에, while문이 끝나도 도와주는 변수가 사라지지 않는다.(물론 도와주는 변수를 for문 밖에 선언해줄경우 for문이어도 도와주는 변수가 for문 실행후 사라지지 않는다)

int i=0;
for( ;i<10;i++){

}

do while문

<기본형태>

do{
   System.out.println("안녕하세요"); //실행할 구문 
}while(false); //조건 검사

조건이 false여도 한 번은 실행한다.

실행부터하고 난 후, 조건 검사

다중 for문

while문 안에 또 while문이 있는 것

<기본형태>

int i=0; //바깥 while문 도와주는 변수 
while(i<10){ //바깥 while문 조건

   int j=0; //안쪽 while문 도와주는 변수
   while(j<10){ //안쪽 whlie문 조건

      j++; //안쪽 while문 도와주는 변수 업데이트
   }
   i++; //바깥쪽 while문 도와주는 변수 업데이트
}

이중 while문을 이용하여 구구단 출력해보기

Tip) 다중 while문으로 마름모 그려보기

ver1.
행렬처럼 그려서 if문 조건 맞췄음

package repeatpackage;

import java.util.Scanner;

public class repeat_while2 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("마름모의 높이를 입력해주세요.(홀수) ");
		int height = sc.nextInt();
		
		int i=0;
		while(i<height) {
			int j=0;
			while(j<height) { //마름모 전체 
				//위쪽 부분 
				if(i<=height/2) {
					if(i+j<=height/2-1) { //왼쪽 윗 부분 
						System.out.print(" ");
					}else if(j-i>=height/2+1) { //오른쪽 윗 부분 
						System.out.print(" ");
					}else {
						System.out.print("*");
					}
				//아래쪽 부분 
				}else if(i>height/2) {
					if(i-j>=height/2+1) { //왼쪽 아랫부분 
						System.out.print(" ");
					}else if(i+j>=height/2*3+1) { //오른쪽 아랫부분 
						System.out.print(" ");
					}else {
						System.out.print("*");
					}
				}
				j++;
			}
			System.out.println("");
			i++;
		}
	}
}

ver2.

package repeatpackage;

import java.util.Scanner;

public class repeat_while2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("마름모 윗 부분 크기를 입력해주세요.");
		
		int height = sc.nextInt();
		
		//윗부분
		int i=0;
		while(i<height) {
			//공백 
			int j=0;
			while(j<height-i) {
				System.out.print(" ");
				j++;
			}
			//별표 
			int k=0;
			while(k<2*i+1) {
				System.out.print("*");
				k++;
			}
			System.out.println("");
			i++;
		}
		//아래부분 
		int l=height-1;
		while(l>=1) {
			//공백 
			int j=0;
			while(j<=height-l) {
				System.out.print(" ");
				j++;
			}
			//별표 
			int k=0;
			while(k<2*l-1) {
				System.out.print("*");
				k++;
			}
			System.out.println("");
			l--;
		}
	}
}

0개의 댓글