【发布时间】:2015-02-09 08:18:43
【问题描述】:
对于以下值
long Count = 2151685171
int CurrentPosition = 849
int employeesLeft = 1276
下面的代码抛出 indexOutOfBound 错误:
int EmployeeToBeEliminated = (int)(count+currentPosition-1)%employeesLeft;
如果这样写
count = (count+currentPosition-1)%employeesLeft;
int EmployeeToBeEliminated = (int)count;
没有抛出错误。但是在第一种情况下,取模后的值减小到0到1276的范围内,所以应该很容易将其转换为int。那么为什么会抛出错误呢?
【问题讨论】:
-
检查 Integer.MAX_INT 和自动装箱:在第一种情况下,所有值都转换为 int,而在第二种情况下,所有值都转换为 long。
-
您包含的代码不会引发 IndexOutOfBoundsException。您可能有一些代码使用
EmployeeToBeEliminated作为某个集合/数组的索引。 -
您的变量名为
Count,但您在代码中使用count。currentPosition也一样。