JAVA/조건문(if, switch)과 반복문(for, while)

[JAVA] 중첩 for문 예제(구구단/별찍기)

prize1209 2021. 6. 10. 21:20

예16)

 

이렇게 별찍기를 하려면 어떻게 해야될까?

 

System.out.println("**********"); 을 5번 반복할 수 있다. 

 

그러나 for문을 사용하면 

 

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

System.out.println("**********");  을 for문을 이용해 5번 반복했다.

System.out.println("**********"); 여기서 * 도 10번 찍혔는데 이것도 for문을 이용해서 반복적으로 하나만 찍어도 10개를 반복하게 해보자.

 

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

안의 for문으로 *이 printf로 붙어서 10개 출력되고 나면, System.out.println();  으로 한 칸 줄 띄운다.

또 같은 안의 for문 10번 반복을 바깥 for문으로 5번 반복한다.  

 

 

j의 조건식에 따라 *이 아래처럼 출력된다. 

for(int j=1; j<=1; j++){System.out.printf("*");}System.out.println();  //*
for(int j=1; j<=2; j++){System.out.printf("*");}System.out.println();  //**
for(int j=1; j<=3; j++){System.out.printf("*");}System.out.println();  //***
for(int j=1; j<=4; j++){System.out.printf("*");}System.out.println();  //****
for(int j=1; j<=5; j++){System.out.printf("*");}System.out.println();  //*****

이걸 i값으로 5번 반복해주고 

public class FlowEx16_2 {
	public static void main(String[] args) {
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= i; j++) { //i값에 따라 j가 동일하게 바뀜
				System.out.printf("*");
			}System.out.println();  			
		}
	}
}

바깥 for 문이 1,2,3,4,5까지 반복될 때 안의 for 문이 i따라서 반복되어 i만큼 옆으로 *을 찍는다. 

 

 

예17) //숫자를 입력받아 라인만큼 * 찍기

import java.util.*;

public class FlowEx17 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("*을 출력할 라인의 수를 입력하세요: ");
		int line = sc.nextInt();

		for (int i = 1; i <= line; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
	}
}

 

예18) //구구단 출력

public class FlowEx18 {
	public static void main(String[] args) {
		for (int i = 1; i <= 9; i++) {
			for (int j = 1; j <= 9; j++) {
				System.out.printf("%d*%d=%d%n", i, j, (i * j));
			}
			System.out.println();
		}
	}
}

1단 부터 9단까지 출력했다, 안쪽 for문은 하나의 단을 출력하는데, 바깥의 for문은 안쪽 for문을 9번 반복 출력한다. 

->바깥쪽 for문이 한 번 반복될 때마다 안쪽 for문이 모두 끝나고 나서 다음 바깥 for문 반복으로 넘어간다. 

 

 

 

예19) 자리수 모두 1,2,3 순서대로 반복 출력

public class FlowEx19 {
	public static void main(String[] args) {
		for (int i = 1; i <= 3; i++) {
			for (int j = 1; j <= 3; j++) {
				for (int k = 1; k <= 3; k++) {
					System.out.printf("%d%d%d%n", i, j, k);
				}
			}
		}
	}
}

각 반복문이 3번씩 반복하므로 모두 (3*3*3=27)이 반복된다. 

 

System.out.printf("%d%d%n", i, j, k) 부분을 System.out.println(""+i+j+k); 로 바꿀 수도 있다. 

 

(참고)

""+7+7="77" 이 된다. 

문자열+any type=문자열

 

 

예20)

public class FlowEx20 {
	public static void main(String[] args) {
		for(int i=1; i<=5; i++) {
			for(int j=1; j<=5; j++) {
				System.out.printf("[%d,%d]", i,j);
			}System.out.println();
		}
	}
}

만약 7열로 바꾸고 싶으면 i<=5를 i<=7로 바꾸면 된다. 

 

예21) 고민해보기!!