2017/3/4,週六git
最近項目中作我的信息設置模塊,遇到了一個生日星座自動匹配問題,因而百度、Google了一翻,網上的大部分答案都是這樣的:github
//星座分割時間 int[] date = {20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22}; String[][] constellations = {{"摩羯座", "水瓶座"}, {"水瓶座", "雙魚座"}, {"雙魚座", "白羊座"}, {"白羊座", "金牛座"}, {"金牛座", "雙子座"}, {"雙子座", "巨蟹座"}, {"巨蟹座", "獅子座"}, {"獅子座", "處女座"}, {"處女座", "天秤座"}, {"天秤座", "天蠍座"}, {"天蠍座", "射手座"}, {"射手座", "摩羯座"}}; //星座生成 傳進是日期格式爲: yyyy-mm-dd public void setConstellations(String birthday) { String[] data = birthday.split("-"); int day = date[Integer.parseInt(data[1]) - 1]; String[] cl1 = constellations[Integer.parseInt(data[1]) - 1]; if (Integer.parseInt(data[2]) >= day) { tvUserDetailAstrology.setText(cl1[1]); } else { tvUserDetailAstrology.setText(cl1[0]); } }
將每月份對應的星座存入一個二維數組中,而後根據日來判斷是屬於哪一個星座。這是最多見的一種實現方式了,用的也比較廣泛。數組
但對於Android開發,又有代碼潔癖的咱們來講確定是會想進一切辦法不讓漢字出如今代碼中的,因此咱們能夠這樣:學習
private static String[] astrologyArray; private static String[][] constellations = new String[12][2]; static { astrologyArray = AppContext.getInstance().getResources().getStringArray(R.array.astrology_array); for (int i = 0; i < constellations.length; i++) { int k = i; for (int j = 0; j < constellations[i].length; j++) { constellations[i][j] = astrologyArray[k]; k += 1; } } }
string文件中:spa
<string-array name="astrology_array"> <item>魔羯座</item> <item>水瓶座</item> <item>雙魚座</item> <item>白羊座</item> <item>金牛座</item> <item>雙子座</item> <item>巨蟹座</item> <item>獅子座</item> <item>處女座</item> <item>天秤座</item> <item>天蠍座</item> <item>射手座</item> <item>魔羯座</item> </string-array>
雖然代碼多了那麼一丟丟,可是仍是值得的!code
這樣咱們的思路仍是和之前同樣,只是將那個二維數組從新獲取了而已,看着順眼了好多!blog
可仔細觀察下星座這個一維數組和二維數組後,咱們發現其實他們都是相鄰的,這個二維數組會不會有點多餘了呢?對,你沒看錯,它就是個小三!索引
//爲了便於查看先寫這兒啦,代碼中確定是要寫到string裏面的,沒有理由~ private static String[] astrologyArray = {"魔羯座, 水瓶座, 雙魚座, 白羊座, 金牛座, 雙子座, 巨蟹座, 獅子座, 處女座, 天秤座, 天蠍座, 射手座, 魔羯座"}; //星座分割時間 int[] date = {20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22}; //星座生成 傳進是日期格式爲: yyyy-mm-dd public void setConstellations(String birthday) { String[] data = birthday.split("-"); int month = Integer.parseInt(data[1]); int compareDay = date[month - 1]; // 所查詢日期在分割日以前,索引-1,不然不變 if (Integer.parseInt(data[2]) >= compareDay) { tvUserDetailAstrology.setText(astrologyArray[month]); } else { tvUserDetailAstrology.setText(astrologyArray[month - 1]); } }
這樣咱們就只須要這一個星座的一維數組就能準確的找到該日期所對應的星座啦!開發
因爲本人水平有限,文中若有錯誤歡迎批評指正,小弟感激涕零!get
最後,感謝兔子家的三哥(http://www.jianshu.com/u/87ae381f8e5b)對我工做的幫助和指導,謝謝!
本文GiutHub上Demo地址:https://github.com/IT-Talon/ConstellationSelect,若是對您的學習有點幫助,但願點個star, 謝謝!