이전 시간에 for문을 이용한 반복문을 배워봤었는데요. 이런 반복문을 이용하면 피라미드나 별모양의 무늬를 만들 수가 있습니다. 그래서 자바 별찍기 예제를 통해서 한번 for문을 복습하는 시간을 갖겠습니다.
별모양을 출력하기 위해서는 for문을 한번 써서는 만들수가 없습니다. 중첩되는 for문을 통해서 별을 출력할 수 있는데요. 한번 예제소스를 보여드리겠습니다.
중첩 for문
일단 우리가 사용할 기능을 for문이지만 이를 여러개 사용해야 합니다.
for(int i=0; i<=10; i++){ for(int j=0; j<=10; j++){ 출력; } }
이런식으로 중첩 for문을 쓰실 수 있는데요.
for문이 2개고 둘다 10번씩 돌기 때문에 10×10= 100
총 100번의 반복문이 수행하게 됩니다.
별찍기 예제소스
위의 예제는 계단식으로 별을 찍는 예제인데요.
결과를 보시기전에 눈으로 한번 살펴서 어떤 결과가 나올지 예측해 보시기 바랍니다.
팁을 하나 드리자면 j쪽 for문이 i값 까지 수행된다는 점입니다.
결과
위와 같이 계단 형태의 피라미드가 출력되었습니다.
예제2
이번 예제는 역 계단 별찍기 인데요.
계단형이나 역계단형이나 결국은 j값으로 컨트롤 하고 있는 모습입니다.
결과2
위와 같은 형태로 역 계단 형태의 별찍기가 완성되었습니다.
사실 자바 별찍기 방법에 정답은 없습니다. 만드는 방법은 정말 많습니다.
이렇게 다중 for문을 이용하면 피라미드, 다이아몬드 등을 구성할 수 있으니 한번 만들어 보시기 바랍니다.
추가 – 피라미드
package test; public class star { public static void main(String[] args) { int center = 10; for(int i=0; i<10; i++) { //행을 10개까지 출력 for(int j=0; j<center*2; j++) { //열은 20개 출력 if(j==center) { //행의 중간 값은 무조건 별을 찍음 System.out.print("*"); } else if((center - i) <= j && (center + i) >= j){ //첫번째 행은 가운데 라인을 찍고 //다음행으로 진행할 때마다 가운데 값의 -1, +1 값에 해당되는 열의 값에 별이 찍혀야 함 //예 1라인 : 10열 별, 2라인 9,10,11열 별, 3라인 8,9,10,11,12열 별 //이에 첫번째 for문에 열에 해당 하는 i값과 중간 값 구간을 계산해 해당 구간에 별을 출력함. System.out.print("*"); } else { //해당되지 않는 구간은 공백 출력 System.out.print(" "); } } System.out.println("");//행 종료 } } }
추가 – 역피라미드
package test; public class star { public static void main(String[] args) { int col = 20; for(int i=0; i<=10; i++) { //행을 10개까지 출력 for(int j=0; j<=col; j++) { //행은 20개 출력 if( i <= j && (col - i) >= j){ //1행이라면 숫자 1~(최대행인 20-행값)을 뺀구간을 별을 찍어야함 //2행은 2행부터 20-2행이므로 18행 까지 별을 찍음 //3행은 3행부터 20-3행이므로 17행 까지 별을 찍음 //이런식으로 계속해서 별을 찍으면 구간이 계속 소멸되면서 가운데 값만 남게 됨. System.out.print("*"); } else { //해당되지 않는 구간은 공백 출력 System.out.print(" "); } } System.out.println("");//행 종료 } } }
이전에 작성했던 자바 for문을 이용한 별찍기 예제에
피라미드와 역피라미드 2가지의 예제를 추가하였습니다.
소스에 주석을 달아놓았으니 한번 분석해 보시기 바랍니다.
또한, 보셔서 아시겠지만 2개의 예제를 한꺼번에 실행시키면
두 개의 피라미드가 합쳐지면서 다이아몬드가 완성됩니다.
하진희
독학으로 자바를 공부를 시작했는데요.
인터넷보면서 예제나 다른사람들은 어떻게 만들었나 보고있습니다.
다름아니라 저걸 보고 *을 만들었는데
마지막줄과 첫번째줄 * 말고 다른모양을 넣고싶습니다.
위에 소스에서 if를 가지고 다른모양을 넣을 수 있을까요?
관리자
어떤 모양이든 가능합니다 해보세요!!!