다중 for문을 활용한 다양한 별자리 패턴 만들기 1.(JAVA)
for문을 활용해서 다양한 패턴을 만들 수 있다.
1) 정사각형 패턴
for(int i=0;i<4;i++) // i가 4보다 작을 때 for문이 실행된다.
{
for(int j=0;j<4;j++)//j가 4보다 작을 때 for문이 실행된다.
{
System.out.print(" *");// *을 화면에 출력한다 j가 4번 루프하므로 4번 화면에 출력한다.
}
System.out.println("");//i가 4번 루프하므로 4번 줄을 바꾼다.
}
정사각형의 패턴을 보기위한 코드는 다음과 같다.
저번에 작성했던 다중포문의 성질을 이용하면 쉽게 작성 할 수 있다.
조금 자세히 설명하자면 i for문에서,i의 값이 0 일때 i는 4보다 작기 때문에,다중 for문의 원리로 j for문이 실행됐고
j for의 조건을 만족하는 총 4번의 루프를 타는 과정에서 별이 4번 출력됐다.
j값이 더 이상 증가 할 수 없어 j for을 벗어나고 i 포문이 실행되어 println 함수가 출력됐다.
이 과정을 4번 반복한 결과 값이 정사각형 패턴이다.
2) 삼각형 패턴
for(int i=1;i<5;i++)//i=1로 지정했다 이유는 삼각패턴을 만들기 위해 j값과 i값을 비교연산해야 했기때문.
{
for(int j=0;j<i;j++)//i값에 따라 루프 할 수 있는 횟수가 바뀐다. 1,2,3,4 횟수로 루프하도록 코딩
{
System.out.print(" *");
}
System.out.println("");
}
빈 공간이 없는 구조이기 때문에 간단하게 별의 갯수만 행에따라 삼각형 구조를 보이게 코딩했다.
다음 패턴 부터는 빈 공간이 존재하는데 이는 그림을 첨부해 설명하려고 한다.
3)삼각형 패턴 2.
이런 구조를 가진 패턴은, 별을 출력하기전에 앞에있는 공간만큼 빈 공간을 만들어 채워줘야 한다.
그렇기 때문에 패턴 자체는 비슷하지만 코딩에 있어서는 조금 더 복잡하다.
그 이유는 빈 공간의 출력과 별 모양의 출력을 각각 해줘야 하기 때문이다.
for(int i=1;i<5;i++)//행의 수
{
for(int j=4;j>i;j--)/*i값을 활용해서, j값이 루프함에 따라 점점 작아지게 설정
j값을 공백의 갯수로 지정했기때문에 위 그림의 구조를 갖게 하기 위해서
3번,2번,1번 루프하도록 변수 값과 식을 코딩했다.*/
{
System.out.print(" ");
}
for(int j=0;j<i;j++) /*i값을 활용해서, j값이 루프함에 따라 점점 커지게 설정
j값을 공백의 갯수로 지정했기때문에 위 그림의 구조를 갖게 하기 위해서
1번 2번 3번 루프하도록 코딩 */{
System.out.print("*");
}
System.out.println("");
}
/*for문 안에 2개의 for문이 있는 다중 for문 구조인데, 빈 공간을 만드는게 우선이라 빈 공간
for문을 앞에 뒀다.*/
4) 정삼각형 패턴
정삼각형의 패턴은 삼각형 패턴2.와 거의 비슷한 방식으로 진행된다.
구조 자체는 아래의 그림과 같이 뒤에도 빈 공간이 있지만, 앞의 빈 공간과 다르게 뒤의 빈 공간은
따로 채워주지 않아도 된다.
정확한 이유는 정삼각형 패턴을 보기 위해서는 앞의 빈공간만 생성하고 ,뒤의 빈 공간은 따로 생성하지 않아도
패턴을 보는 입장에서는 생성한 것과 동일하기 때문에
굳이 코드를 늘릴 이유는 없기 때문이다.
삼각형 패턴 2.에 사용했던 코드를 그대로 가져와서 조금만 수정해보겠다.
for(int i=1;i<5;i++)//행의 수
{
for(int j=4;j>i;j--)/*i값을 활용해서, j값이 루프함에 따라 점점 작아지게 설정
j값을 공백의 갯수로 지정했기때문에 위 그림의 구조를 갖게 하기 위해서
3번,2번,1번 루프하도록 변수 값과 식을 코딩했다.*/
{
System.out.print(" ");
}
for(int j=0;j<i;j++) /*i값을 활용해서, j값이 루프함에 따라 점점 커지게 설정
j값을 공백의 갯수로 지정했기때문에 위 그림의 구조를 갖게 하기 위해서
1번 2번 3번 루프하도록 코딩 */{
System.out.print("*");
}
System.out.println("");
}
/*for문 안에 2개의 for문이 있는 다중 for문 구조인데, 빈 공간을 만드는게 우선이라 빈 공간
for문을 앞에 뒀다.*/
여기 수정해야하는 값은 별의 갯수이다. 별의 갯수가 1씩 증가하게 했는데 위의 그림대로 구조를 갖추려면 1개로 시작해 2개씩 증가해야한다.
for(int j=0;j<i;j++) {
System.out.print("*");
}
수정을 해줘야 하는 부분은 여기 뿐이다.
for(int j=1;j<i*2;j++) {
System.out.print("*");
}
이런식으로 수정했다. 여기서 j값을 1로 바꾼이유는 j값이 0일 경우에 실행하면 i*2라는 조건을 추가했기 때문에 for문이 2단위로 실행되기 때문이다. 원하는 별의 출력 횟수는 2,4,6,8가 아니라 1,3,5,7이기때문에 j값을 1로 바꾸었다.
다이아몬드 패턴은 복잡해서 1.에서는 간단한 패턴들만 정리해뒀다.
2.에서는 다이아몬드 패턴만 분석해서 올릴예정이다.