사각형 별만들기
for(int i =1; i<=star; i++) {
for(int j=1; j<=star; j++) {
System.out.print("*");
}
System.out.println("");
}
첫번째 반복문 : 행
두번쨰 반복문 : 열
첫 번째 반복문이 한차례 동작할 때
두 번째 반복문이 star(5)만큼 실행하여 * 을 찍어주게 된다.
>> 이러면 첫번째 줄이 완성되고,
위 작업이 끝난이후 첫 번째 반복문이 다시 5번까지 실행하기 때문에
위 그림과 같은 모양이 출력된다.
한쪽으로 치우친 별만들기
int star = 5;
for(int i=1; i<=star; i++) {
for(int j=1; j<=i; j++)
{
System.out.print("*");
}System.out.println("");
}
}
첫 번째 반복문이 한 차례 동작할 때
두 번째 반복문이 동작할 때 첫 번째 반복문의 동작 횟 수만큼 동작하도록 한다.
그렇게 지정을 하면
첫 번째 반복문이 한 번 동작할 때, 두 번째 반복문도 한 번 동작하여 한 개의 * 을 출력하게 된다.
star 가 5를 가지고 있기 때문에, 첫 번째 반복이 5번 실행되는 동안 두 번째 반복문도 순차적으로
다섯번까지 실행하게 된다.
거꾸로 치우친 별만들기
for(int i=1; i<=star; i++) {
for(int j=1; j<=(star+1)-i; j++) {
System.out.print("*");
}
System.out.println("");
}
첫 번째 반복문이 동작할 때, 두 번째 반복문도 동일하게 동작하지만,
거꾸로 출력을 하기위해서는 5,4,3,2,1 과 같은 순서를 가져야한다.
다중 for문에 대해 설명을 다시하면
for(int i =1; i<=5; i++){
for(int j = 1; j<=2; j++)
}
과 같은 그림에서
첫 번째 반복문이 실행되는 동안 최대 2의 범위를 가지는 두 번째 반복문은
두 번 실행되게 된다.
첫번째 반복문 : 1회 동작 / 두 번째 반복문 : 2회동작
첫번째 반복문 : 2회 동작 / 두 번째 반복문 : 2회동작
위 처럼 동작하게 되기 때문에
거꾸로 최대 별 수를 출력하기 위해서는
기존 star 값에서 1을 더하고, 첫번째 반복문이 실행된 횟 수만큼 빼줘야
최대 별이 첫번째 출력물에 쌓이게 된다.
반복을 할 수록 i값은 커지기 때문에 위와 같은 결과를 가지게 된다.
피라미드 별만들기
for(int i=1; i<=star; i++) {
for(int j=1; j<=star-i; j++) {
System.out.print(" ");
}
for(int k=1; k<i*2; k++) {
System.out.print("*");
}
System.out.println("");
}
피라미드 별을 만드는 방법을 쉽게 설명을 하면
거꾸로 작아지는 별 출력물과, 순서대로 커지는 출력물을 하나로 합친다라고 생각하면 된다.
더 쉽게 설명하면, " " 공백이란 문자가 한 쪽으로 치우친 별들을 옆으로 민다고 생각하면 된다.
위 코드를 보면
첫 번째 행을 담당하는 반복문 속에
공백과 별을 찍어주는 열을 담당하는 반복문을 입력하면 된다.
기존 별 찍기와 동일하게 첫 번째 반복문은 star만큼 동작을 하고,
첫 번째 반복문이 한 번 동작할 때
공백을 찍어주는 반목문과 별을 찍어주는 반복문이 범위만큼 동작한다고 보면 된다.
첫 번째 줄에 별이 하나고, 공백이 네개가 존재한다.
이렇게 출력하기 위해서는 공백의 범위를 행의 범위에서 행의 반복횟 수만큼 차감시키면
그 수만큼 공백이 발생하게 된다.
별은 홀수로 출력이 되기 때문에, 첫 번째 반복 횟 수의 2배미만의 범위를 지정하여
1, 3, 5, 7...이 출력되도록 한다.
그렇게 출력을 하면
행의 첫 번째 반복시 공백은 4개 / 별은 1개가 출력이 되고
행의 두 번째 반복시 공백은 3개 / 별은 3개가 출력이 된다.
이렇게 행의 범위만큼 반복을 하게되면, 위와 같은 피라미드가 출력되게 된다.
중간에 빈공백을 가진 별 만들기
import java.util.Scanner;
public class test02 {
public static void main(String[] args) {
// 가로, 세로르 입력받음
// 가로 길이, 세로 길이의 사각형 출력
// 단, 윤관만 나타나도록 처리
Scanner sc = new Scanner(System.in);
System.out.print("가로 : ");
int a = sc.nextInt();
System.out.print("세로 : ");
int b = sc.nextInt();
for (int i = 1; i <= a; i++) {
for (int j = 1; j <= b; j++) {
if(i>1 && i<a && j>1 && j<b ) {
System.out.print(" ");
}else {
System.out.print("*");
}
}
System.out.println("");
}
}
}
728x90
'Programming > Java' 카테고리의 다른 글
[JAVA] 탈출문 (1) | 2023.11.01 |
---|---|
[JAVA] 소수(Prime Number) 구하기 (1) | 2023.10.31 |
[JAVA] 배열 (0) | 2023.10.30 |
[JAVA] 제어문 (0) | 2023.10.26 |
[JAVA] 배열과 입력 (2) | 2023.10.26 |