近期知識總結(計算颱風面雨量及統計影響XX市的颱風)

知識點溫故


1. poi讀寫exel文件的內容。
詳情見 IntelliJ IDEA環境下 POI讀寫Exel文件

2. 計算兩個date格式的日期之間相差的天數
按理說,計算兩個date之間相差的天數,可以直接使用getTime()分別獲得毫秒數後相減,再轉換爲天數。但是這種方法可能會產生誤差。原因是直接相減有可能會多出一天,而我們想要的結果是不關心兩個date的時、分、秒的值,只在乎兩個“日”之間的差值。
那麼爲了避免這種情況,我們可以採用以下這種方式來獲得想要的結果:
先講Date對象轉換爲Calendar對象,將時、分、秒置零。再getTime()獲取毫秒數相減就可以了。

示例代碼:

public int calculateDaysBetween(Date firstDate,Date seconddate){
        //初始化兩個Calendar實例
        Calendar firstCalendar = Calendar.getInstance();
        Calendar secondCalendar = Calendar.getInstance();
        //將date對象轉換爲Calendar類型
        firstCalendar.setTime(firstDate);
        secondCalendar.setTime(seconddate);
        //將時、分、秒置零
        firstCalendar.set(Calendar.HOUR_OF_DAY, 0);
        firstCalendar.set(Calendar.MINUTE, 0);
        firstCalendar.set(Calendar.SECOND, 0);

        secondCalendar.set(Calendar.HOUR_OF_DAY, 0);
        secondCalendar.set(Calendar.MINUTE, 0);
        secondCalendar.set(Calendar.SECOND, 0);
        //計算兩個日期相差的天數
        return ((int)(secondCalendar.getTime().getTime()/1000)-(int)(firstCalendar.getTime().getTime()/1000))/3600/24 + 1;
        //加1是因爲我需要的天數包括開始和結束的那兩天
    }

3. for each循環的使用
有的時候for each循環比for循環更高效,當遍歷進行的操作與下標無關時,最好使用for each循環,這樣我們就無須關心被遍歷對象的長度,只需要把注意力集中在操作上面,會使得代碼清晰不少。

示例代碼:

    for (TyphoonInfluence t : typhoonInfluenceList) {  
            String percentage = t.getFirst() / t.getAll() * 100;
            t.setProportion(percentage);
        }

4. 兩個小知識點
兩個數相除,結果的類型會與精度大的那個數保持一致。比如 int/int ,結果還是 int ;int / float 結果爲float類型;int / double 類型,結果則爲 double 類型。
想讓浮點數格式化輸出,可以用 String.format("%.nf",str) 方法,n爲要保留的小數位數。

**5. 容易犯的小錯誤 **
這個以前也出現過,但還是偶爾忘記,有必要養成良好的習慣,保證以後不再犯同樣的錯誤。
java中字符串的比較最好使用 .equals() 而不是 '’。因爲’'比較的是字符串變量本身的值,即兩個對象在內存中的首地址。而.equals()比較的則是字符串的內容。注意:這對StringBuffer不適用,因爲它沒有重寫equals方法,用的還是Object的equals方法,即比較的還是兩個變量的首地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章