可以用下面的方法打印一下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值没变, 也就是不计数,该位置跳过。
这样解释应该是对的吧? |