package homework;
import java.util.Scanner;
/*별 표를 모양에 따라 출력한다.*/
public class Homework_2 {
public static void main(String[] args) {
Star s = new Star();
Scanner inp = new Scanner(System.in);
String respone;
while(true) {
System.out.println("보고싶은 별표의 번호를 입력해 주세요.\n(1,2,3,4,5)");
s.view(inp.nextInt(),inp);
System.out.println("계속하시겠습니까?(Yes : Y,y)");
respone = inp.next();
if( !(respone.equals("Y")||respone.equals("y")) )break;
}
}// end main method
}//end Homework_2 class
class Star{
private void star_01() {
/*
* 필요한 *의 개수만큼 반복을 하며 반복횟수가 4의 배수이면 줄바꿈을 한다.
* */
for(int i = 0; i <16; i++) {
System.out.print("*");
if(i%4 == 3) System.out.println(""); // 줄바꿈
}
}//end method star_01
private void star_02() {
/*
* 출력을 하는 갯수(공간의 크기)만큼 반복
* i를 몫과 나머지로 구분
* 나머지가 2(반복횟수가 3의 배수)이면 줄을 바꾼다.
* 몫은 한 줄당 공통으로 적용된다.
* 몫이 나머지보다 같거나 크면 *를 출력
* ex)몫이 1인 행
* - 나머지 0 : "*"을 출력
* - 나머지 1 : "*"을 출력
* - 나머지 2 : " "을 출력
* */
int a, b;
for(int i = 0; i < 9; i++) {
a = i/3; // 몫
b = i%3; // 나머지
if(a >= b) { // 몫이 나머지와 같거나 크면 "*"을 실행
System.out.print("*");
}else {
System.out.print(" ");
}
if(b == 2)System.out.println(""); // 반복이 3회이면 줄바꿈
}
}//end method star_02
private void star_03() {
/*
* i를 공간의 크기(9)만큼 반복
* 2에서 몫을 뺀값과 나머지를 비교하여 나머지가 더 크거나 같으면 "*"출력
* ex) 몫 0 -> 2
* - 나머지 0 : " "출력
* - 나머지 1 : " "출력
* - 나머지 2 : "*"출력
* 반복횟수가 3의 배수이면 줄바꿈
*/
int a,b;
for(int i = 0; i < 9; i++) {
a = i/3; //몫
b = i%3; //나머지
if(2-a <= b) { // 2-몫이 나머지보다 작거나 같으면 "*"을 출력
System.out.print("*");
}else {
System.out.print(" ");
}
if(b == 2)System.out.println(""); // 반복횟수가 3의 배수이면 줄바꿈
}
}// end method star_03
private void star_04() {
/*
* 공간의 크기(15)만큼 반복
* 2-+몫과 나머지를 비교하여 나머지가 작거나 크면 " "을 출력
* (star_03()의 생각을 반대로 사용)
* 5회 반볶시 줄바꿈
*/
int a, b;
for(int i = 0; i < 15; i++) {
a = i/5;// 몫
b = i%5;//나머지
if(b < 2-a || 2+a < b) { // 2-몫이 나머지 보다 크거나 2+몫이 나머지보다 작으면 " "을 출력
System.out.print(" ");
}else {
System.out.print("*");
}
if(b == 4)System.out.println(""); // 줄바꿈
}
}// end method star_04
private void star_05() {
/*
* 방법은 star_04()와 동일
* 대신 몫을 크기의 가운데(2)를 기준으로 대칭으로 값을 가지도록 설정
* ex) 0, 1, 2, 1, 0 순서로 값을 지정
*/
int a, b;
for(int i = 0; i < 25; i++) {
b = i%5; // 나머지값
if(i/5 <= 2) { // 크기(5)의 가운데 값(2)를 기준으로 대칭으로 값을 입력받는다.
a = i/5;
}else {
a = 4 - i/5;
} // 2를 기준으로 대칭
if(2-a > b || 2+a <b) {// star_04()와 동일
System.out.print(" ");
}else {
System.out.print("*");
}
if(b == 4)System.out.println(""); // 줄바꿈
}
}// end method star_05
private void star_06(Scanner sc) {
/*
* star_05()와 방법은 동일
* Scanner를 매개변수로 받아 크기를 따로 입력받는다.
* star_04()의 5를 size로 바꾸고 2(가운데값)을 (size-1)/2로 바꾸어 계산
*/
int size,a,b; // size는 크기변수
System.out.print("다이아몬드의 크기를 입력해주세요(홀수만)\n입력 : ");
size = sc.nextInt();// size값을 입력받음
for(int i = 0; i < size*size; i++) {
b = i%size; // 나머지값
if(i/size <= (size-1)/2) { // size의 중앙값을 기준으로 대칭
a = i/size;
}else {
a = size -1 - i/size;
}
if((size-1)/2-a > b || (size-1)/2+a <b) { // star_04()와 동일
System.out.print(" ");
}else {
System.out.print("*");
}
if(b == size - 1)System.out.println(""); // 줄바꿈
}
}
void view(int index, Scanner sc) {
switch(index) {
case 1 :
star_01();
break;
case 2 :
star_02();
break;
case 3 :
star_03();
break;
case 4 :
star_04();
break;
case 5 :
star_05();
break;
case 6 :
star_06(sc);
break;
default : System.out.println("잘못 입력하였습니다.");
}
}//end method view
}// end class Star
'Java > 문제' 카테고리의 다른 글
| [자료구조]힙 (0) | 2019.06.19 |
|---|---|
| 여러 쓰레드에서 하나의 변수에 차례로 접근하 (0) | 2019.06.12 |
| List 구현(Java) (0) | 2019.06.11 |
| Java_Stack,Queue 상속으로 구현 (0) | 2019.06.10 |
| 급여정보조회 프로그램 (0) | 2019.06.10 |