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

思路

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

算法

[java][/java] view plaincopy

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

最终的效果图

初始图:

选择图:

判断星座

Java代码

[java][/java] view plaincopy

  1. package com.test0803;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import java.util.*;
  6. /*
  7.  *
  8.  * */
  9. class MyFrameee extends JFrame implements ItemListener {
  10.     private JComboBox day = new JComboBox(), month = new JComboBox();
  11.     private JLabel tip = new JLabel(“请选择日期”);
  12.     public static final String[] starArr = {“魔羯座”,”水瓶座”, “双鱼座”, “牡羊座”,
  13.         “金牛座”, “双子座”, “巨蟹座”, “狮子座”, “处女座”, “天秤座”, “天蝎座”, “射手座” };
  14.     public static final int[] DayArr = {22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22};
  15.     MyFrameee() {
  16.         super(“星座计算”);
  17.         for (int i = 1; i <= 12; i++) {
  18.             //void addItem(Object anObject)  为项列表添加项。
  19.             month.addItem(String.valueOf(i));
  20.         }
  21.         for (int i = 1; i <= 31; i++) {
  22.             day.addItem(String.valueOf(i));
  23.         }
  24.         //setForeground:设置此组件的前景色。
  25.         tip.setForeground(Color.blue);
  26.         Container con = getContentPane();
  27.         con.setLayout(new FlowLayout());
  28.         con.add(month);
  29.         con.add(new JLabel(“月-“));
  30.         con.add(day);
  31.         con.add(new JLabel(“日”));
  32.         con.add(tip);
  33.         day.addItemListener(this);
  34.         month.addItemListener(this);
  35.         setSize(280, 100);
  36.         setLocation(400, 300);
  37.         setVisible(true);
  38.         setResizable(false);
  39.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  40.     }
  41.     public static String getConstellation(Calendar time) {
  42.         int month = time.get(Calendar.MONTH);
  43.         int day = time.get(Calendar.DAY_OF_MONTH);
  44.         if (day < DayArr[month]) {
  45.             month = month – 1;
  46.         }
  47.         if (month >= 0) {
  48.             return starArr[month];
  49.         }
  50.         return starArr[0];
  51.     }
  52.     public void itemStateChanged(ItemEvent e) {
  53.         Calendar date = Calendar.getInstance();
  54.         date.set(2010, Integer.parseInt((String) month.getSelectedItem()),
  55.                 Integer.parseInt((String) day.getSelectedItem()));
  56.         tip.setText(getConstellation(date));
  57.     }
  58. }
  59. public class Test_Star2 {
  60.     public static void main(String[] args) {
  61.         new MyFrameee();
  62.     }
  63. }

不足之处

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

标签