0

如果我有例如int size并且包含例如列表的大小,那么进行int distance操作modiedistance%size(-size - 1) <= distance <= (size - 1)

即距离永远在这个范围内(-size - 1) <= distance <= (size - 1)

如果我对此是正确的,那么在 JDK 中的 CollectionsRotate 中进行以下条件检查的含义是什么?

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

我在这里可能是错误的或生疏的,但我认为distance此时不会因为添加而为空。如果列表是0我们一开始就不会达到那个条件。
那么需要这个条件检查吗?

4

3 回答 3

4

如果distance == n * size(n 一个 int) 那么distance%size == 0. 例如如果distance == 0distance == size

于 2012-05-09T16:15:13.400 回答
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; 
于 2012-05-09T16:15:17.717 回答
0

如果 size 为 5 且 distance 为 0,则永远不会进行加法,并且在遇到检查时距离将为零。

于 2012-05-09T16:15:06.313 回答