* 前者比較後者,若前者大於後者則會顯示正整數 * 前者比較後者,若前者小於後者則會顯示負數 * 前者比較後者,若前者等於後者則會顯示 0 ```java String d1 = "0521"; String d2 = "0620"; String bd1 = "0522"; System.out.println(bd1.compareTo(d1) + " " + bd1.compareTo(d2)); //這邊會印出 1 -1 //所以也可以這麼解釋, 當 0 -1, 1 -1, 1 0 在這三種狀況下時, //代表 0522 是介於 d1 及 d2 之間 String bd2 = "0913"; System.out.println(bd2.compareTo(d1) + " " + bd2.compareTo(d2)); //會印出 4 3, 當兩者都大於 1, 代表 0913 已經超過日期 d1 d2 範圍了 String bd3 = "0123"; System.out.println(bd3.compareTo(d1) + " " + bd3.compareTo(d2)); //會印出 -4 -5, 當兩者都小於 1, 代表 0123 還沒進入日期 d1 d2 範圍 //已知雙子座的日期區間為 0521-0620 //若使用者輸入了 0619 的日期,而系統想要確認他是否為雙子座 //就可以使用 compareTo 的功能 String bd4 = "0620"; System.out.println(bd4.compareTo(d1) + " " + bd4.compareTo(d2)); //這邊會印出 1 0, 意即 0620 大於 0521,且 0620 等於 0620 ``` 練習題目:讓使用者輸入生日,判斷使用者的星座。 ```java //解法提示: //解法一、(難度高)判斷使用者輸入的日期是不是剛好大於等於 1222 且小於等於 1231 // 或者大於等於 0101 且小於等於 0119,以及當訖日小於起始日時。 // //解法二、(難度低)當所有判斷都不成立的時候,代表這日期一定為摩羯座。 // 畢竟不可能有一個日期不屬於任何星座。 //判斷星座的程式碼 String day = "19991223"; String monthDay = day.substring(4); //取到日期 1223 Map<String, String> zodiacDate = zodiacDate(); // 跑 for 迴圈,逐一比對星座日期區間,這邊是使用生日字串作比較 for (Map.Entry<String, String> entry : zodiacDate.entrySet()) { String[] dates = entry.getValue().split("-"); //分割星座的日期區間字串 String startDate = dates[0]; //該星座的起始日,接下來使用字串比較 String endDate = dates[1]; //該星座的訖日 if (monthDay.compareTo(startDate) >= 0 && monthDay.compareTo(endDate) <= 0) { System.out.println(day + " is in " + entry.getKey() + "'s date range. "); break; } } //想繼續使用 date 去比較的話,compareTo 也依然可以用,不過摩羯座問題仍未解 SimpleDateFormat sdf = new SimpleDateFormat("MMdd"); Date monday = sdf.parse(monthDay); for (Map.Entry<String, String> entry : zodiacDate.entrySet()) { String[] dates = entry.getValue().split("-"); Date startDate = sdf.parse(dates[0]); Date endDate = sdf.parse(dates[1]); if (monday.compareTo(startDate) >= 0 && monday.compareTo(endDate) <= 0) { System.out.println(day + " is in " + entry.getKey() + "'s date range. "); break; } } //星座區間 map Map<String, String> zodiacDate = new HashMap<>(); zodiacDate.put("aquarius", "0120-0218"); zodiacDate.put("pisces", "0219-0320"); zodiacDate.put("aries", "0321-0419"); zodiacDate.put("taurus", "0420-0520"); zodiacDate.put("gemini", "0521-0620"); zodiacDate.put("cancer", "0621-0722"); zodiacDate.put("leo", "0723-0822"); zodiacDate.put("virgo", "0823-0922"); zodiacDate.put("libra", "0923-1022"); zodiacDate.put("scorpio", "1023-1121"); zodiacDate.put("sagittarius", "1122-1221"); zodiacDate.put("capricorn", "1222-0119"); ```