Math類中floorMod方法源碼解析
jdk中源碼
if條件語句解釋:若符號相同並且摸部位領,則r--
以上代碼並不難,帶入x,y就可以得出響應的結果,我們這裏主要解釋下,這個方法的設計初衷
源碼解析來源
在《java核心編程卷一》中爲我們提供了一個案例來說明這個這個方法的設計初衷
第11版中P39第二段原文如下(沒有找到11版pdf)
“ 下面考慮這樣一個問題:計算一個時鐘時針的位置。這裏要做一個時間調整,而且要歸一化爲一個0~11之間的數。這很簡單:(position + adjustment) % 12”。不過,如果這個調整爲負會怎麼樣呢?你可能會得到一個負數。所以要引入一個分支,或者使用((position + adjustment) % 12+12)%12。不管怎樣都很麻煩。
floorMod方法就讓這個問題變得容易了:flooraMod(position + adjustment,12)總會得到一個0~11之間的數。”
(很遺憾沒有沒有找到pdf版,所以拍照上傳)
floorMod方法解法
結合《java核心編程卷一》我們茅塞頓開,於是正確的解法呼之欲出:
下面我來圖解說明:
結合上面兩張圖我們來說一下floorMod(x,12)的計算方式
從圖中可以看出,順時針爲數值增加(+),逆時針爲數值減小(-)
若x > 0,順時針查值,若x < 0,逆時針查值
案例:floorMod(1,12) = 1,floorMod(-1,12) = 11
同理,結合下入說明floorMod(x,-12)的計算方式
從圖中可以看出,順時針爲數值減小(-),逆時針爲數值增加(+)
若x > 0,逆時針查值,若x < 0,順時針查值
案例:floorMod(-1,-12) = -1,floorMod(1,-12) = -11