본문 바로가기
Kosta DevOps 과정 280기/과제

사주팔자

by 롯슈83 2024. 5. 14.

 

사주팔자 : 생년, 생월, 생일, 생시 ==> 4개의 기둥 8글자라는 뜻

 

내용 : 사용자한테 이름, 생년(띠), 생월, 생일, 생시를 입력받아 사주팔자를 판별하여 출력하는 프로그램을 작성해봅니다.

(사주팔자 풀이 및 그림 참조)

 

[그림]

[풀이]

천귀 : 귀인 대접
천액 : 액땜
천권 : 권력, 리더십
천파 : 파동이 있어요, 해외 이주
천인 : 인간성, 법 없이도 살 사람
천문 : 머리가 좋아
천복 : 복을 갖고태어남
천고 : 외로움을 많이 타요
천역 : 역마살, 다방면에 관심
천간 : 이성에게 매력
천수 : 손재주가 있어요.
천명 : 명이 길어요

 

--- 예시 ----

개띠(1994)  음력 3월 15일 저녁 8시인 경우는

  • 개띠: 출발지점 7시이므로 천수
  • 3월: 자기를 포함해서 3칸 이동해서 '자' 자리이므로 천귀
  • 15일 : 자기 포함해서 15칸 이동해서 '인'자리이므로 천권
  • 저녁 8시 : 술시이므로 생일 끝난 곳에서(인) 인에서부터 8칸 이동해서 '자'이므로 천귀(자축인묘진사오미신유술해)

쥐띠(1996) 음력 1월 11일 생시가 자시이면

  • 쥐띠: 천귀
  • 1월 : 천귀
  • 11일: 천수
  • 자시: 천수

닭띠( 1993 ) 음력 9월 21일 생시 낮 3시

  • 닭띠: 천간
  • 9월 :천문
  • 21일: 천액
  • 신시 : 천간

 

import java.util.Date;
import java.util.Scanner;
public class javaTest3 {
    //질문과 함께 String 반환
    public static String getAnswerString(String s){
        String answer;
        Scanner sc =  new Scanner(System.in);
        System.out.print(s+"\n==> ");
        answer = sc.next();
        System.out.println();
        return answer;
    }

    //질문과 함께 int 반환
    public static int getAnswerInt(String s){
        int answer;
        Scanner sc =  new Scanner(System.in);
        System.out.print(s+"\n==> ");
        answer = sc.nextInt();
        System.out.println();
        return answer;
    }

    //출생년도를 리턴하는 함수
    public static int getBirthYear(){
        int currentYear, birthYear = 0;
        Date currentDate = new Date();
        
        currentYear = currentDate.getYear() + 1900;
        birthYear = getAnswerInt("나이 또는 출생연도를 입력해주세요");  
        birthYear = (birthYear < 1000)? currentYear - birthYear : birthYear;
        
        return birthYear;
    }

    //띠 번호를 반환
    public static int getAnimalNum(int birthYear){
        int animalNum;
        animalNum = (birthYear - 1900) % 12;
        animalNum = (animalNum < 0)? animalNum + 12: animalNum;
        
        return animalNum;
    }
    
    //그 사람의 정보들을 질문하고 생년월일과 운명 번호 리스트들의 내용을 바꿈
    public static void fateAndInfoSetting(int []birth, int []fateNums){
        int moveNum, posNum;
        
        String Time = "월일시";
        String name = "";

        posNum = 1;         
            name = getAnswerString("당신의 이름은 무엇인가요?");
            birth[0] = getBirthYear();

            for(int i = 0; i < fateNums.length; i++){
                moveNum = (i == 0)? getAnimalNum(birth[0]) : getAnswerInt("몇 "+Time.charAt(i-1)+"에 태어나셨나요?");
                birth [i] = (i == 0)? birth[0] : moveNum;
                if (i == 3){
                    moveNum += (moveNum % 2);
                    moveNum = (moveNum == 24)? (moveNum / 2) - 12 + 1: moveNum / 2 + 1;
                }
            posNum += --moveNum;
            posNum %= 12;
            fateNums[i] = posNum;
        }

        System.out.printf("[%s님의 출생 연월일시]\n%d년 %d월 %d일 %d시\n", name, birth[0], birth[1], birth[2], birth[3]);
    }
    //계속 할건지 다시 할건지 묻기 //will fix
    public static void askContinue(char loopAnswer, char continueAnswer, int []birth, int []fateNums){
        char answer = loopAnswer;
        while(answer == loopAnswer){
            
            fateAndInfoSetting(birth, fateNums);//will fix

            answer = getAnswerString("계속 진행하시려면 "+continueAnswer+", 다시 입력하시려면 "+loopAnswer+"입력해주세요.").charAt(0);
            while(!(answer == continueAnswer|| answer == loopAnswer))
                answer = getAnswerString(continueAnswer+" 또는 "+loopAnswer+"만 입력해주세요").charAt(0);
        }
    }
    //그 사람의 사주팔자를 알려줌.
    public static void startHoroscopeGame(){
        int []birth = new int[4];
        int []fateNums = new int[4];      
        String []fate12 = {
            "천귀 : 귀인 대접", 
            "천액 : 액땜",
            "천권 : 권력, 리더십",
            "천파 : 파동이 있어요, 해외 이주", 
            "천인 : 인간성, 법 없이도 살 사람", 
            "천문 : 머리가 좋아", 
            "천복 : 복을 갖고태어남", 
            "천고 : 외로움을 많이 타요", 
            "천역 : 역마살, 다방면에 관심", 
            "천간 : 이성에게 매력", 
            "천수 : 손재주가 있어요.", 
            "천명 : 명이 길어요"
        };
        //will fix
        askContinue('n', 'y', birth, fateNums);
        System.out.printf("**** 사주팔자결과 *****\n%s\n%s\n%s\n%s\n", fate12[fateNums[0]], fate12[fateNums[1]], fate12[fateNums[2]], fate12[fateNums[3]]);
    }

    public static void main(String[] args){
        startHoroscopeGame();
    }
}

'Kosta DevOps 과정 280기 > 과제' 카테고리의 다른 글

클래스 만들기  (0) 2024.05.17
무료 암검진 대상자 판별 프로그램  (0) 2024.05.12