JAVA
자바예제 01 - 다양한 별 그리기
남기루
2019. 6. 14. 21:01
반응형
6가지의 경우를 가진 별 그리기 예제입니다.
1번 경우
****
****
****
2번 경우
*
**
***
3번 경우
--*
-**
***
4번 경우
--*
-***
*****
5번 경우
--*
-***
*****
-***
--*
6번 경우: 숫자를 입력받아 해당하는 층의 마름모 그리기
ex) 13 입력시
------*
-----***
----*****
---*******
--*********
-***********
*************
-***********
--*********
---*******
----*****
-----***
------*
코드
import java.util.Scanner;
public class StarExam {
public static final String STAR = "*";
// star-1번 과제
void starOne() {
for (int i = 1; i <= 12; i++) {
System.out.print(STAR);
if (i % 4 == 0)
System.out.println(); // 4개씩 끊어서 출력
}
}
// star-2번 과제
void starTwo() {
for (int i = 1; i < 4; i++) {// 행
for (int j = 0; j < i; j++) { // i행일때 별 개수 i개 입력
System.out.print(STAR);
}
System.out.println();
}
}
// star-3번 과제
void starThree() {
int fr = 2;
for (int i = 1; i < 4; i++) { // 행
for (int j = 1; j <= 3; j++) {// 열
if (j <= fr) { // 공백
System.out.print(" ");
} else { // 별
System.out.print(STAR);
}
}
fr--;
System.out.println();
}
}
// star-4번 과제
void starFour() {
int fr = 2, ba = 3;
for (int i = 1; i <= 3; i++) {// 행
for (int j = 1; j <= 6; j++) {// 열
if (j <= fr) {// 공백 삽입
System.out.print(" ");
} else if (j > ba) {// 공백 삽입
System.out.print(" ");
} else { // 별 삽입
System.out.print(STAR);
}
}
fr--;
ba++;
System.out.println();
}
}
// star-5번 과제
void starFive() {
int fr = 3, ba = 3; // 공백이 들어가는 조건 fr앞 공백, ba뒷 공백 조건으로 사용
for (int i = 1; i <= 5; i++) { // 5번 반복
for (int j = 1; j <= 5; j++) { // 5열 생성
if (j < fr) { // 각 열을 fr과 비교해 공백이 들어갈 부분에 공백 삽입, 중간열을 기준으로 앞 공백
System.out.print(" ");
} else if (j > ba) { // 각 열을 ba와 비교해 공백 삽입, 중간열을 기준으로 뒷 공백
System.out.print(" ");
} else { // 별이 들어갈 곳
System.out.print(STAR);
}
}
if (i < 3) { // 중간층까지 별 개수를 늘리도록 조건을 증가 및 감소
fr--;
ba++;
} else { // 중간층 이후 별 개수를 줄이도록 조건을 증가 및 감소
fr++;
ba--;
}
System.out.println();
}
}
// star-6번 과제
void starSix() {
Scanner sc = new Scanner(System.in);
System.out.print("몇층까지 하겠습니까? (홀수만 가능):");
int re = sc.nextInt(); // 층 입력
if (re % 2 == 0) {
System.out.println("홀수를 입력해주세요.");
} else {
int fr = re / 2 + 1, ba = re / 2 + 1; // 공백이 들어가는 조건 fr앞 공백, ba뒷 공백 조건으로 사용
for (int i = 1; i <= re; i++) { // i를 입력받은 re층 만큼 반복
for (int j = 1; j <= re; j++) { // j는 입력받은 re의 열 만큼 반복
if (j < fr) { // 앞부분이 공백이 들어가는 조건일 경우 공백 삽입
System.out.print(" ");
} else if (j > ba) { // 뒷 부분이 공백이 들어가는 조건일 경우 공백 삽입
System.out.print(" ");
} else {
System.out.print(STAR);
}
}
if (i < re / 2 + 1) { // 중간층까지 별 개수를 늘리도록 조건을 증가 및 감소
fr--;
ba++;
} else { // 중간층 이후 별 개수를 줄이도록 조건을 증가 및 감소
fr++;
ba--;
}
System.out.println();
}
}
}
public static void main(String[] args) {
StarExam starexam;
starexam = new StarExam(); // static이 아닐 경우 new를 해야한다.
// 클래스로 받아 오는것들은 static이다
Scanner sc;
sc = new Scanner(System.in);
int num1;
String replay;
do {
System.out.print("1~6 입력");
num1 = sc.nextInt();
switch (num1) { // 번호에 따라 case를 나눈다
case 1:
starexam.starOne();
break;
case 2:
starexam.starTwo();
break;
case 3:
starexam.starThree();
break;
case 4:
starexam.starFour();
break;
case 5:
starexam.starFive();
break;
case 6:
starexam.starSix();
break;
default: // 다른 값이 들어올 경우
System.out.println("잘못 입력했습니다.");
}
System.out.println("다시 하시겠습니까? (Y/N)");
replay = sc.next(); // 비교할 값을 입력받음
} while (replay.equals("y") || replay.equals("Y"));
// replay가 "y"나 "Y"일 경우 true값으로 do를 반복
System.out.println("끝났습니다."); // false일 경우 출력 후 종료
}
}
실행 결과
반응형