A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张金 中级黑马   /  2012-10-7 15:37  /  1612 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张金 于 2012-10-7 17:01 编辑

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啊,循环有点多,谁能分析一下吗?

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
  1. for (int x = 0; x < arr.length; x++) {
  2.                         if (arr[x] != 0) {
  3.                                 System.out.println(arr[x]);
  4.                                 break;
  5.                         }
  6.                 }
复制代码
因为在执行上面代码之前,前面的两个for循环和一个while循环的代码,将数组中的除倒数第二个元素外其他的所有元素都修改为了0,所以最后打印时,只将arr[6]的值打印了出来,因为只有arr[6]的值不为0了,而且只有arr[6]值一直没有被修改过.

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
加一行代码简单分析一下
http://bbs.itheima.com/forum.php?mod=attachment&aid=NzkwNnw1OWViYjYyNGI2NmVlNjMyMGNhMmVlMDQ4MjlkNmE1YXwxNzMxNjA5ODU1&request=yes&_f=.jpg
运行结果
http://bbs.itheima.com/forum.php?mod=attachment&aid=NzkwN3xjMDU4YjA3ZDE2ZWE3MDAxMzQ2NjlmNmEzZTE2M2Q0N3wxNzMxNjA5ODU1&request=yes&_f=.jpg
具体流程可以debug一下

code.jpg (26.3 KB, 下载次数: 48)

code.jpg

result.jpg (15.83 KB, 下载次数: 88)

result.jpg
回复 使用道具 举报
package com.sjl.reflect;

public class BLOGTEST {
        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++;
                                System.out.println(pos+"@");
                               if(pos==arr.length)
                                        pos=0;
                               System.out.println(pos+"@@");
                                while(arr[pos]==0)
                                {
                                        pos++;
                                        System.out.println(pos+"@@@");
                                        if(pos==arr.length)
                                                pos=0;
                                        System.out.println(pos+"@@@@");
                                }
                        }
                        arr[pos] = 0;
                        //System.out.println(arr[pos]);
                        System.out.println(pos+"@@@@@");
                }

               for(int x=0; x<arr.length; x++)
                {
                        if(arr[x]!=0)
                        {
                                System.out.println(arr[x]);
                                System.out.println(x);
                                break;
                        }
                }
        }
}

输出结果是这样的:
0@
0@@
1@
1@@
2@
2@@
2@@@@@
3@
3@@
4@
4@@
5@
5@@
5@@@@@
6@
6@@
7@
7@@
8@
0@@
0@@@@@
1@
1@@
2@
2@@
3@@@
3@@@@
4@
4@@
4@@@@@
5@
5@@
6@@@
6@@@@
7@
7@@
8@
0@@
1@@@
1@@@@
1@@@@@
2@
2@@
3@@@
3@@@@
4@
4@@
5@@@
5@@@@
6@@@
6@@@@
7@
7@@
7@@@@@
8@
0@@
1@@@
1@@@@
2@@@
2@@@@
3@@@
3@@@@
4@
4@@
5@@@
5@@@@
6@@@
6@@@@
7@
7@@
8@@@
0@@@@
1@@@
1@@@@
2@@@
2@@@@
3@@@
3@@@@
3@@@@@
7
6

写代码多试试就出来了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马