-
[Java] 중첩 for문으로 별찍기Java/Java 개념 2022. 7. 6. 18:20
중첩 for문을 통해 5가지 별찍기 문제를 해결하고자 한다.
for문을 연습하기에는 별찍기가 제일 좋다고 하여, 시도하게 되었다.
1. 간단한 2차원 배열의 별찍기
public class Practice { public static void main(String[] args) { for(int i=0; i<3; i++) { // row = 3 for(int j=0; j<4; j++) { // column = 4 System.out.print("*"); } System.out.println(); } } }
row를 3, column을 4로 설정하고 별을 찍는 간단한 문제라, 어렵지 않았다.
2. 삼각형 모양 별 찍기
public class Practice { public static void main(String[] args) { for (int i=0; i<3; i++) { // row = 3 for (int j=0; j<3; j++) { // column = 3 if(i>=j) { // row >= column일 경우 별을 찍습니다. System.out.print("*"); } } System.out.println(); } } }
row를 3, column을 3으로 설정한 후, row의 인덱스 번호가 column의 인덱스 번호보다 크거나 같을 때 별을 찍었다.
3. 삼각형 모양 별 찍기 (y축 대칭)
public class Practice { public static void main(String[] args) { for(int i=0; i<3; i++) { // row = 3 for(int j=3; j>0; j--) { // column = 3, 2, 1 하면서 내려옴 if(j>i+1) { // column이 1부터 시작하기에 i+1 적용, j가 i보다 더 크면 빈칸 찍기 System.out.print(" "); }else{ // 그 이외에는 별 찍기 System.out.print("*"); } } System.out.println(); } } }
row를 3, column을 3으로 설정 후, j를 3부터 시작하여 j-- 를 진행하고, j보다 i가 더 크면 별을 찍는 구조로 설계했다.
4. 피라미드 모양 별 찍기
public class Practice { public static void main(String[] args) { int row = 3; // row = 3 for(int i=0; i<row; i++) { // row = 3 for(int j=1; j<row-i; j++) { // 빈칸 순서대로 찍기 System.out.print(" "); } for(int j=0; j< i*2+1; j++) { // 별이 찍히는 개수 = i*2+1이므로 범위 설정 System.out.print("*"); } System.out.println(); } } }
피라미드는 빈칸과 별이 찍히는 부분을 집중해서 구현해 보았다.
for문 안에 for문을 두개 넣어, 빈칸을 찍는 for문과 별을 찍는 for문을 구분하여 구현하였다.
5. Scanner로 홀수를 입력받아 그에 맞는 다이아몬드 모양의 별 찍기
import java.util.Scanner; public class Practice { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("홀수를 입력하세요. : "); int num = sc.nextInt(); // scanner를 통해 크기를 입력 받음 int start5 = num/2; // 별이 찍히기 시작하는 장소 int end5 = num/2; // 별이 찍히는게 끝나는 장소 int middle5 = num/2; // row, column의 중간 for(int i=0; i<num; i++) { // row = num for(int j=0; j<num; j++) { // column = num if(j >= start5 && j <= end5) { // j >= num/2 && j <= num/2 System.out.print("*"); // 별을 찍는다. } else { System.out.print(" "); } } if(i < middle5) { // i가 middle보다 작으면 start5 -= 1; // start는 -1씩 내린다. end5 += 1; // end는 -1씩 올린다. System.out.println(); } else if(i >= middle5) { // i가 middle보다 크거나 같으면 start5 += 1; // start는 +1씩 올린다. end5 -= 1; // end는 -1씩 내린다. System.out.println(); } } sc.close(); } }
이중포문 두개로 해결하려 했더니 솔직히 조금 많이 어려웠다.
필드로 별이 찍히기 시작하는 장소(start)와 별 찍히기가 끝나는 장소(end), row와 column의 가운데인 middle을 두었다.
middle을 기준으로 위, 아래를 나누어 별을 찍었으며, 시작점과 끝점을 +-1씩 해가며 별을 찍었다.
'Java > Java 개념' 카테고리의 다른 글
[Java] 제어문(선택 제어문 / 반복 제어문), 제어 키워드 (0) 2022.07.15 [Java] this와 this()의 차이점 (0) 2022.07.10 [Java] 클래스 외부, 내부 구성 요소 (2) 2022.07.09 [Java] 논리 연산자(&&, ||)와 비트 연산자(&, |)의 차이 (2) 2022.07.05 [Java] 객체 지향 프로그래밍(OOP)이란? (1) 2022.07.05