数组值反转程序异常:仅输出部分元素的问题排查求助
你的数组反转程序输出异常的原因分析与修复方案
嘿,我来帮你拆解下这个问题~首先咱们先看你的代码逻辑,然后一步步找问题:
int[] val = {0, 1, 2, 3}; int temp; for(int i=0;i<val.length/2;i++) { temp=val[i]; val[i]=val[val.length - 1 - i]; val[val.length - 1 - i]=temp; System.out.println(val[i]); }
为什么只输出3和2?
你的数组长度是4,val.length/2的结果是2,所以这个for循环只会执行两次(i=0和i=1):
- 当i=0时:你把val[0]和val[3]交换,此时数组变成
{3,1,2,0},然后打印val[0]也就是3; - 当i=1时:你把val[1]和val[2]交换,数组变成
{3,2,1,0},然后打印val[1]也就是2;
循环到i=2时,i<2不成立,循环直接结束,所以自然只输出两个值。
为什么换成打印temp会输出0和1?
同样是两次循环:
- i=0时,temp先存了val[0]的初始值0,交换后打印temp就是0;
- i=1时,temp存了val[1]的初始值1,交换后打印temp就是1;
所以输出0和1。
怎么修复才能输出完整的反转数组?
如果想要看到整个反转后的数组内容,你需要在交换循环结束后,再遍历整个数组打印:
int[] val = {0, 1, 2, 3}; int temp; // 先完成数组反转的交换操作 for(int i=0;i<val.length/2;i++) { temp=val[i]; val[i]=val[val.length - 1 - i]; val[val.length - 1 - i]=temp; } // 遍历打印整个数组 for(int num : val) { System.out.println(num); }
这样就能输出3、2、1、0四个值啦。
内容的提问来源于stack exchange,提问作者Marco Aiello
相关产品推荐
相关产品推荐

