【Java】实现一个根据日期判断星座程序的编写

来源:互联网 发布:php中print r 编辑:程序博客网 时间:2024/04/29 03:03

思路

直接根据月份做索引,然后根据日期边界判断是本月的星座还是上月的。

算法

    private static String getAstro(int month, int day) {    String[] starArr = {"魔羯座","水瓶座", "双鱼座", "牡羊座",     "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座" };       int[] DayArr = {22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22};  // 两个星座分割日        int index = month;        // 所查询日期在分割日之前,索引-1,否则不变        if (day < DayArr[month - 1]) {                index = index - 1;        }        // 返回索引指向的星座string        return starArr[index];    }

最终的效果图

初始图:

选择图:

判断星座


Java代码

package com.test0803;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/* *   * */class MyFrameee extends JFrame implements ItemListener {private JComboBox day = new JComboBox(), month = new JComboBox();private JLabel tip = new JLabel("请选择日期");public static final String[] starArr = {"魔羯座","水瓶座", "双鱼座", "牡羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座" };   public static final int[] DayArr = {22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22};   MyFrameee() {super("星座计算");for (int i = 1; i <= 12; i++) {//void addItem(Object anObject)  为项列表添加项。month.addItem(String.valueOf(i));}for (int i = 1; i <= 31; i++) {day.addItem(String.valueOf(i));}//setForeground:设置此组件的前景色。tip.setForeground(Color.blue);Container con = getContentPane();con.setLayout(new FlowLayout());con.add(month);con.add(new JLabel("月-"));con.add(day);con.add(new JLabel("日"));con.add(tip);day.addItemListener(this);month.addItemListener(this);setSize(280, 100);setLocation(400, 300);setVisible(true);setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static String getConstellation(Calendar time) {       int month = time.get(Calendar.MONTH);       int day = time.get(Calendar.DAY_OF_MONTH);       if (day < DayArr[month]) {           month = month - 1;       }       if (month >= 0) {           return starArr[month];       }       return starArr[0];   }  public void itemStateChanged(ItemEvent e) {Calendar date = Calendar.getInstance();date.set(2010, Integer.parseInt((String) month.getSelectedItem()),Integer.parseInt((String) day.getSelectedItem()));tip.setText(getConstellation(date));}}public class Test_Star2 {public static void main(String[] args) {new MyFrameee();}}

不足之处

为了方便,没有确定特殊月份的日期数量,都是按照31天处理的。
原创粉丝点击