黑马程序员技术交流社区
标题:
解释程序的运算结果
[打印本页]
作者:
黄飞1991
时间:
2014-3-14 15:31
标题:
解释程序的运算结果
本帖最后由 黄飞1991 于 2014-3-15 09:13 编辑
class LuckNumber
{
public static void main(String[] args)
{
int[] arr = {1,2,3,4,5,6,7,8};
int pos = -1;
for(int x=0;x<arr.length-1; x++)
{
for(int y=0; y<3;y++)
{
pos++;
if(pos==arr.length)
pos=0;
while(arr[pos]==0)
{
pos++;
if(pos==arr.length)
pos=0;
}
}
arr[pos] = 0;
//System.out.println(arr[pos]);
}
for(int x=0; x<arr.length; x++)
{
if(arr[x]!=0)
{
System.out.println(arr[x]);
break;
}
}
}
}
程序运行的结果为什么是7,谁能把程序的流程详细解释一遍吗?
作者:
chen_x
时间:
2014-3-14 16:18
可以用下面的方法打印一下for(int x=0;x<arr.length-1; x++)每次x循环完一次后,arr[]数组的取值变化:
class LuckNumber
{
public static void main(String[] args)
{
int[] arr = {1,2,3,4,5,6,7,8};
int pos = -1;
for(int x=0;x<arr.length-1; x++)
{
for(int y=0; y<3;y++)
{
pos++;
if(pos==arr.length)
pos=0;
while(arr[pos]==0)
{
pos++;
if(pos==arr.length)
pos=0;
}
}
arr[pos] = 0;
//System.out.println(arr[pos]);
sop(arr);
}
}
public static void sop(int[] arr){
for(int r=0;r<arr.length;r++){
System.out.print(arr[r]);
}
System.out.println("");
}
}
运行结果是
12045678
12045078
02045078
02040078
00040078
00040070
00000070
结合代码解释的话,就是从数组的位置值pos=0起,开始数数组的非零元素,每数到第3个非零元素时,就将这第3个非零元素赋为0。每数到3个非零元素后,计数归1,重新开始从1数,但是是继续从当前pos位置数, 数到arr[7]结尾时再从arr开关数数。
之所以是数非零元素,可以看代码里遇到arr[pos]==0时,pos++但是y值没变, 也就是不计数,该位置跳过。
这样解释应该是对的吧?
作者:
张贺
时间:
2014-3-14 17:02
第一次外循环时,内循环执行时pos的值依次为0,1,2,此时pos既不等于数组的长度,对应的数组值也
不为0,内循环只执行了pos++,结束后,arr[2]=0;
第二次外循环时,内循环执行时pos的值依次为3,4,5,此时pos既不等于数组的长度,对应的数组值也不
为哦,内循环只执行了pos++,结束后,arr[5]=0;
第三次外循环时,内循环执行时pos的值依次为5,7,8,当最后一次循环时,pos的值等于数组长度,所以
将pos=0;循环结束后,arr[0]=0;
第四次外循环时,内循环第一次执行时,pos的值为1,即不满足pos等于数组长度,也不满足arr[1]=0,第
二次执行时,arr[2]=0,满足while循环,所以对pos进行自增,pos=3,第三次执行时只执行了pos++,所以
内循环结束后pos=4,所以arr[4]=0;
第五次外循环时,内循环第一次执行,pos自增为5,满足while循环条件即arr[5]=0,所以pos进行自增为6
,第二次执行时,循环只执行了pos++,pos值为7,第三次执行时pos值为8,满足等于数组长度,执行pos=0
。然后又满足while循环条件即arr[0]=0;所以pos++为1,循环结束,arr[1]=0;
第六次外循环时,内循环第一次执行时,pos自增为2,满足while循环pos自增为3,第二次执行时,pos为4
满足while循环条件,所以pos自增为5,继续满足循环条件,pos自增为6,第三次执行时,只执行了pos++,循环结束pos值为7,arr[7]=0;
第七次外循环时,内循环第一次执行时,pos自增为8,满足等于数组长度,pos=0,且满足while循环pos自
增为1,继续满足循环条件,pos自增为2,继续执行循环,pos为3,不满足结束while循环,第二次执行时,pos自增为4满足while循环知道pos为6时,结束while循环,第三次循环,while会不断循环,直到pos为3时,不满足条件结束循环,此时pos为3,arr[3]=0。外循环结束,此时数组的值为{0,0,0,0,0,0,7,0}
所以当进行最后的循环时只有7满足条件。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2