hyeongwoo's blog

[Java] 제어문_(반복문 활용) 본문

JAVA

[Java] 제어문_(반복문 활용)

toribro 2024. 1. 22. 23:47

자바에서 반복문의 개념은 간단하지만 막상 활용하려면 헷갈린다. 그래서 연습삼아 반복문을 활용하여 별찍기를 해보겠다

별을 찍어서 총 4종류의 피라미드를 만들었다.

자바의 반복문을 이용해서 별을 찍었다

별을 찍기전에 저 모양들의 패턴을 분석했다.

프로그램은 일반적으로 왼쪽에서 오른쪽, 위에서 아래로 실행된다.

그러므로 첫째줄부터 왼쪽에서 오른쪽으로

그다음 줄 왼쪽에서 오른쪽으로 실행된다고 보면된다.

각줄은 공백-별 패턴이 반복된다.

줄이 정해져있고 반복 횟수가 정해져있으므로  for문을 사용했다.

 

각줄의  최대 별개수를 입력해 별을 찍는 코드이다.

피라미드

공백은 한개씩 줄어들고 별은 1개씩 늘어난다

void 피라미드() {
    Scanner sc =new Scanner(System.in);		
    System.out.println("============피라미드================");
    String star="";//별모양 저장할 String 참조변수

    System.out.print("각 줄의 최대 별 수를 입력하세요: ");
    int length=sc.nextInt();

    for(int i=0; i<length; i++){
            //공백
            for(int l=length-1; l>i; l--) {
                star+=" ";
            }
            //별
            for(int k=0; k<=i; k++){
                star+=" *";//공백포함 별
            }

            star+="\n";
       }
      System.out.println(star);
}

코드를 보면 바깥쪽 for문은 줄을 나타내고 안쪽  첫번째 for문은 공백 두번째 for문은 별을 나타낸다

별을 찍을때 별사이의 공백을 둬야 한칸씩 밀리면서 예쁜 피라미드 모양이 된다. 뒤에 나올 모든 모양도 공백을 하나씩 두었다.

 

역피라미드

 피라미드의 반대이다.  첫째줄부터 공백은 한개씩 늘어나고 별은 1개씩 줄어든다.

void 역피라미드() {
	 Scanner sc =new Scanner(System.in);
	 System.out.println("============역피라미드================");
	 String star="";
    
	 System.out.print("각 줄의 최대 별 수를 입력하세요:  ");
	 int length=sc.nextInt();

     for(int i=0; i<length; i++) {
 
         for(int k=0; k<i; k++) {
                star+=" ";
         }

         for(int l=length; l>=i+1; l--) {
                star+=" *";
         }
                star+="\n";
      }

	 System.out.println(star);
}

 

역시 별 사이의 공백을 두었다.

 

다이아몬드

별의 개수가 늘어나다가 최대 별개수가 되면 다시 줄어드는 패턴이다.

최대 별개수 이전에는 별이 1개부터 시작하여  별은 1개씩 증가하고 공백은 1개씩 감소한다. 

최대 별 개수 이후부터는 공백이 1개씩 늘어나고 별이 1개씩 줄어든다.

void 다이아몬드() {
	  Scanner sc =new Scanner(System.in);
      System.out.println("============다이아몬드================");
	  String star="";
        
	  System.out.print("각 줄의 최대 별 수를 입력하세요:  ");
	  int length=sc.nextInt();
        
	  for(int i=-length+1; i<length; i++) {
			
		  for(int l=Math.abs(i); l>0; l--) {
				star+=" ";
		  }
			
		  for(int k=Math.abs(i); k<length; k++) { 
			    star+=" *";
		  }
          
		 star+="\n";
         
        }
      
      System.out.println(star);
}

다이아몬드는 정수의 절댓값을 활용했다. 정수의 절댓값을 활용하면 대칭성을 이용할 수 있다.  예를들어 바깥쪽 for문안에 제어 변수가  -5부터 5까지 증가할때  안쪽 for문에서 절댓값을 활용하면 5부터 0으로 감소하다가 다시 5로 증가하는 효과를 얻을수 있다.

자바의 Math.abs(정수값); 을 사용하면 절댓값을 구할 수 있다.

 

모래시계

최대 별 개수부터 시작하여 첫줄부터는 별이 1개일때까지 별이 1개씩 줄어든다.

별이 1개일때부터 다시 증가한다.

void 모래시계() {
    Scanner sc =new Scanner(System.in);
	System.out.println("============모래시계================");
	String star="";
        
	System.out.print("각 줄의 최대 별 수를 입력하세요: ");
	int length=sc.nextInt();
        
	for(int i=-length+1; i<length; i++) {
			
		for(int l=Math.abs(i); l<length-1; l++){
			star+=" ";
		}
			
		for(int k=0; k<=Math.abs(i); k++) {
			star+=" *";
		}
            
            star+="\n";
	}
    
    System.out.println(star);
}

모래시계도 정수의 절댓값을 활용했다. 

 

'JAVA' 카테고리의 다른 글

[Java] 클래스_(구성)  (2) 2024.01.24
[Java] 객체  (0) 2024.01.24
[Java] 제어문_(조건문)  (1) 2024.01.21
[Java] 제어문_(반복문)  (1) 2024.01.21
[Java] 배열_(복사)  (0) 2024.01.17