为何Java程序输出1 1 2 2 3 3而非1 1 2 2 3 1?整数除法疑问
为什么你的Java程序输出是1 1 2 2 3 3而不是1 1 2 2 3 1?
首先先把你的代码贴出来,方便咱们一步步分析:
class Scratch { public static void main(String[] args) { int[] a = { 1, 2, 3, 4, 5, 3 }; for (int i = 0; i < 6; i++) System.out.print(a[i / 2] + " "); } }
你提到的“Java中整数除法3/2会取整数部分1”这点完全正确,但问题出在循环每一次i取值对应的i/2结果上,咱们逐个拆解6次循环的执行过程:
- 当
i=0时:0/2=0→ 取数组a[0],值为1 - 当
i=1时:1/2=0→ 取数组a[0],值为1 - 当
i=2时:2/2=1→ 取数组a[1],值为2 - 当
i=3时:3/2=1→ 取数组a[1],值为2 - 当
i=4时:4/2=2→ 取数组a[2],值为3 - 当
i=5时:5/2=2→ 取数组a[2],值为3
看出来了吧?最后一次循环i=5时,5/2的整数除法结果是2(5除以2商2余1,整数除法只取商的整数部分),对应的数组元素是a[2]=3,而非你预期的1。你预期的最后一个1可能是误以为最后一次访问的是数组的其他索引(比如是不是把i/2错当成了i%2?或者混淆了数组元素的位置?),但按照当前代码逻辑,每两次循环会取数组里同一个位置的元素:前两次取a[0],中间两次取a[1],最后两次取a[2],所以输出自然是1 1 2 2 3 3啦。
内容的提问来源于stack exchange,提问作者Cameron Hutchings
相关产品推荐
相关产品推荐

