根據出生日期判斷屬相和星座,Java語言編寫,無bug
習題代碼
package com.newer.oop;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* author: HCQ
* date: 2018/7/26
* see: 1. 根據生日判斷屬相和星座 2. 年份分爲閏年和平年 3. 判斷月份和日期是否輸入正確
*/
public class Birthday {
static int year;
private static Scanner sc;
static boolean dayPanDuan; // 判斷日期輸入是否正確,月份天數正確爲true,錯誤爲false
/* 根據年份判斷屬相 */
public static String ShuXiang(int year) {
String sx = null;
switch (year % 12) {
case 4:
sx = "鼠";
break;
case 5:
sx = "牛";
break;
case 6:
sx = "虎";
break;
case 7:
sx = "兔";
break;
case 8:
sx = "龍";
break;
case 9:
sx = "蛇";
break;
case 10:
sx = "馬";
break;
case 11:
sx = "羊";
break;
case 0:
sx = "猴";
break;
case 1:
sx = "雞";
break;
case 2:
sx = "狗";
break;
case 3:
sx = "豬";
break;
}
return sx;
}
/* 根據月份和日期判斷星座 */
public static String XingZuo(int year, int month, int day) {
String xz = null;
if ((month == 3 && day >= 21 && day <= 31) || (month == 4 && day >= 1 && day <= 19)) {
xz = "白羊";
}
if ((month == 4 && day >= 20 && day <= 30) || (month == 5 && day >= 1 && day <= 20)) {
xz = "金牛";
}
if ((month == 5 && day >= 21 && day <= 31) || (month == 6 && day >= 1 && day <= 21)) {
xz = "雙子";
}
if ((month == 6 && day >= 22 && day <= 30) || (month == 7 && day >= 1 && day <= 22)) {
xz = "巨蟹";
}
if ((month == 7 && day >= 23 && day <= 31) || (month == 8 && day >= 1 && day <= 22)) {
xz = "獅子";
}
if ((month == 8 && day >= 23 && day <= 31) || (month == 9 && day >= 1 && day <= 22)) {
xz = "處女";
}
if ((month == 9 && day >= 23 && day <= 30) || (month == 10 && day >= 1 && day <= 23)) {
xz = "天秤";
}
if ((month == 10 && day >= 24 && day <= 31) || (month == 11 && day >= 1 && day <= 22)) {
xz = "天蠍";
}
if ((month == 11 && day >= 23 && day <= 30) || (month == 12 && day >= 1 && day <= 21)) {
xz = "射手";
}
if ((month == 12 && day >= 22 && day <= 31) || (month == 1 && day >= 1 && day <= 19)) {
xz = "摩羯";
}
if ((month == 1 && day >= 20 && day <= 31) || (month == 2 && day >= 1 && day <= 18)) {
xz = "水瓶";
}
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { // 閏年2月29天
if ((month == 2 && day >= 19 && day <= 29) || (month == 3 && day >= 1 && day <= 20)) {
xz = "雙魚";
}
} else { // 平年2月28天
if ((month == 2 && day >= 19 && day <= 28) || (month == 3 && day >= 1 && day <= 20)) {
xz = "雙魚";
}
}
return xz;
}
/* 判斷日期是否輸入正確 */
public static void PanDuanday(int year, int month, int day) {
switch (month) {
case 1:
if (day >= 1 && day <= 31) { // 日期在該月份中,dayPanDuan爲ture
dayPanDuan = true;
break;
} else { // 日期在該月份中,dayPanDuan爲false
dayPanDuan = false;
break;
}
case 2:
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
if (day >= 1 && day <= 29) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
} else {
if (day >= 1 && day <= 28) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
}
case 3:
if (day >= 1 && day <= 31) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 4:
if (day >= 1 && day <= 30) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 5:
if (day >= 1 && day <= 31) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 6:
if (day >= 1 && day <= 30) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 7:
if (day >= 1 && day <= 31) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 8:
if (day >= 1 && day <= 31) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 9:
if (day >= 1 && day <= 30) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 10:
if (day >= 1 && day <= 31) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 11:
if (day >= 1 && day <= 30) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
case 12:
if (day >= 1 && day <= 31) {
dayPanDuan = true;
break;
} else {
dayPanDuan = false;
break;
}
}
}
/* main方法 */
public static void main(String[] args) {
sc = new Scanner(System.in);
System.out.println("請輸入");
System.out.print("年: ");
try {
year = sc.nextInt(); // 輸入年份
System.out.print("月: ");
int month = sc.nextInt(); // 輸入月份
if (month >= 1 && month <= 12) { // 判斷月份是否輸入正確,是否在1-12中
System.out.print("日: ");
int day = sc.nextInt(); // 輸入日期
PanDuanday(year, month, day); // 調用判斷日期的方法
if (dayPanDuan == true) { // 日期在該月份中,爲ture
System.out.println(year + "/" + month + "/" + day + " " + "屬相: " + ShuXiang(year) + ", " + "星座: "
+ XingZuo(year, month, day)); // 輸出打印年月日,屬相和星座
} else { // 日期不在該月份中,爲false
System.out.println("輸入日期有誤。");
}
} else { // 月份不在1-12中
System.out.println("輸入月份有誤。");
}
} catch (InputMismatchException e) {
System.out.println("輸入非法。");
} catch(Exception e) {
System.out.println("其他錯誤。");
e.printStackTrace();
} finally {
System.out.println("程序結束!");
System.exit(0); //退出系統
}
}
}
我的總結
- 該題主要運用了switch語句,if else語句, try catch finally語句
- 此題解決了年份,月份和日期輸入非法的BUG
a. 年份,月份,日期輸入非數字會報“輸入非法。”的提示
b. 月份只能在1-12中,否則報“輸入月份有誤。”的提示
c. 日期只能是該月份的天數
1、3、5、7、8、10、12月31天
4、6、9、11 月30天
2月平年28天,閏年29天
如果不在這些範圍內,會提示“輸入日期有誤。”
答案僅供參考,小萌新初次寫博客,大神勿噴。
2018/8/3