2012-05-09 57 views
0

如果我有例如int size幷包含例如然後具有int distancemod操作的列表的大小,即distance%size(-size - 1) <= distance <= (size - 1)在這種情況下是否需要檢查零(模數和加法後)?

即,距離將始終在此範圍內(-size - 1) <= distance <= (size - 1)

如果我對此有誤,那麼CollectionsRotate in JDK下面的條件檢查是什麼意思?

if (size == 0) 
    return; 
distance = distance % size; 
if (distance < 0) 
    distance += size; 
if (distance == 0) //Why this check???? 
    return;  

我可能是錯的或生鏽這裏,但我不認爲distance在這一點上都不能爲null作爲加法的結果。如果名單是0,我們首先不會達到這個條件。
那麼是否需要這種條件檢查?

回答

4

if if distance == n * size(n int)then distance%size == 0。例如,如果distance == 0distance == size

+0

在這裏,我想我快要瘋了所有的奇怪的答案。相當明顯的距離可以很容易地在這裏。 – Voo

+1

+1如果'distance == n * size',其中n可以是負值或正值,模數爲0。 –

0

如果大小爲5,距離爲0,則添加將永遠不會完成,並且距離將在檢查時爲零。

1

嗯,還有的if (distance < 0)但距離可以0爲好,因此跳過 distance += size;。因此檢查distance == 0

你也可以寫使用else if代碼:

//if distance is < 0, distance + size can't be 0 (due to the modulo before) 
//however, distance could be 0 at this point if distance was 0 before or became 0 due to the modulo 
if (distance < 0) 
    distance += size; 
else if (distance == 0) //Why this check???? 
    return; 
相關問題