2012-05-09 2 views
0

int sizeであり、例えば、リストのサイズは、modの操作distance%sizeを持つint distanceです。(-size - 1) <= distance <= (size - 1)この場合(モジュラスと加算の後に)ゼロチェックが必要ですか?

eです。距離は常にこの範囲の中にあります(-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

distance == n * size(n int)then distance%size == 0。たとえば、distance == 0またはdistance == sizeの場合

+0

そして、ここで私は、私はすべての奇妙な答えと狂ったと思いました。明らかに距離は簡単に0になります。 – Voo

+1

+1 'distance == n * size'の場合、nは負または正であり、モジュラスは0です。 –

0

サイズが5で距離が0の場合、加算は行われず、小切手に当たったときに距離はゼロになります。

1

まあ、if (distance < 0)がありますが、距離は、このように distance += size;をスキップし、同様0である可能性があります。したがって、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; 
関連する問題