DAY+5 for문을 활용한 별찍기(중첩반복문)

2020. 8. 17. 01:03Web_Back-end/JAVA_선행

※중첩반복문 : 반복문 안에 다른 반복문이 실행되는 것 (외부반복문 + 내부반복문)

☆ 주의점 : 각 반복문을 제어하는 변수는 달라야함

 

중첩반복문을 이해할 수 있는 for문을 활용한 별찍기

예제 1) 일반 삼각형출력하기

//5줄짜리 삼각형 별찍기
//삼각형의 줄 수를 변수 x로 선언하여 사용하면 줄 수 변경이 편리함
		int x=5;
		for(int i=0; i<x; i++) {
			for(int j=0; j<x-i-1; j++) {
				System.out.print(" ");
			}
			for(int j=0; j<2*i+1; j++) {
				System.out.print("*");
			}
			System.out.println("");
		}

▽ Console 창 출력예시-5줄 삼각형

더보기
5줄 삼각형

예제 2) 사용자에게 삼각형 값을 받아서 출력하기

//사용자에게 삼각형 값을 받아서 출력하기
		Scanner input=new Scanner(System.in);
		System.out.println("삼각형의 줄 수를 입력하시오.");
		int x=input.nextInt();
		
		for(int i=0; i<x; i++) {
			for(int j=0; j<x-i-1; j++) {
				System.out.print(" ");
			}
			for(int j=0; j<2*i+1; j++){
				System.out.print("*");
			}
			System.out.println("");
		}

▽ Console 창 출력예시-사용자+삼각형

더보기
6줄의 삼각형출력

예제 3) 일반 마름모 출력하기

	//5줄 짜리 마름모를 출력(줄수를 f로 선언하여 변경이 용이하게 함)
    int f=5;
		for(int i=0; i<(f-1)/2; i++) {
			for(int j=0; j<(f-1)/2-i; j++) {
				System.out.print(" ");
			}
			for(int j=0; j<2*i+1; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		
		for(int i=0; i<1; i++) {
			for(int j=0; j<f; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		for(int i=0; i<(f-1)/2; i++) {
			for(int j=0; j<i+1; j++) {
				System.out.print(" ");
			}
			for(int j=0; j<(f-2)-(2*i); j++) {
				System.out.print("*");
			}
			System.out.println();
		}

▽ Console 창 출력예시-마름모(3,5,9줄)

더보기
f=3 일때
f=5 일때
f=9 일때

예제 4) 사용자에게 마름모 값을 받아서 출력하기

//사용자에게 마름모 값을 받아서 출력하기
		/*
        단락을 나눠서 1,2,3파트로 나누어 풀었음
		만약 사용자값이 5일경우 출력(0은 공백을 의미함)
		00*   
		0***  
		***** <- 가운데 *갯수와 사용자 값이 같음 이걸기준으로 위,아래 파트를 나눔
		0***
		00*
		
        */
		
		Scanner input=new Scanner(System.in);
		System.out.println("홀수를 입력하시오.");
		int x=input.nextInt();//x는 사용자가 넣는 값
				
		//첫번째 단락 i는 x값에서 -1(가운데 중심라인) 나누기 2(위,아래단락 두개기때문)
		for(int i=0; i<(x-1)/2; i++) { 
			//공백은 좌우로 봤을때 x값에서 별하나가 들어온 것을 뺀 만큼 생기기 때문에
			//좌우를 반으로 나눠서 왼쪽값만 표기함=>(x-1)/2-i
			//-i를 하는 이유는 아래로 내려갈 수록 i만큼 공백이 줄어들기 때문
			for(int j=0; j<((x-1)/2-i); j++) {
				System.out.print(" ");
			}
			//별의 갯수는 1부터 시작해서 2만큼 증가함
			//i가 0부터 시작하기 때문에 2*i+1 을 사용했음
			for(int j=0; j<2*i+1; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		//중심되는 단락(x값과 *의 갯수가 같음)
		for(int i=0; i<1; i++) {
			for(int j=0; j<x; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		//마지막 단락 i는 x값에서 -1(가운데 중심라인) 나누기 2(위,아래단락 두개기때문)
		for(int i=0; i<(x-1)/2; i++) {
			//공백은 하나씩 늘어가기 때문에 i값에 +1
			for(int j=0; j<i+1; j++) {
				System.out.print(" ");
			}
			//별개수의 시작은 x값보다 2만큼 적게 시작하고
			//아래로 갈수록 갯수 자체가 2개씩 양옆으로 줄기 때문에 2곱하기 i만큼 빼준다
			for(int j=0; j<(x-2)-(2*i); j++) {
				System.out.print("*");
			}
			System.out.println();
		}

▽ Console 창 출력예시-사용자+마름모

더보기
7줄의 마름모 출력