2012-05-09 35 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; 
相关问题