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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 武奇伟 于 2013-2-15 21:45 编辑
  1. class LuckNumber
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = {1,2,3,4,5,6,7,8};

  6.                 int pos = -1;

  7.                 for(int x=0;x<arr.length-1; x++)
  8.                 {
  9.                         for(int y=0; y<3;y++)
  10.                         {
  11.                                 pos++;

  12.                                 if(pos==arr.length)
  13.                                         pos=0;
  14.                                 while(arr[pos]==0)
  15.                                 {
  16.                                         pos++;
  17.                                         if(pos==arr.length)
  18.                                                 pos=0;
  19.                                 }
  20.                         }
  21.                         arr[pos] = 0;
  22.                         //System.out.println(arr[pos]);
  23.                 }

  24.                 for(int x=0; x<arr.length; x++)
  25.                 {
  26.                         if(arr[x]!=0)
  27.                         {
  28.                                 System.out.println(arr[x]);
  29.                                 break;
  30.                         }
  31.                 }
  32.         }
  33. }
复制代码

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

7 个回复

倒序浏览
我试着分析一下:
class LuckNumber
{
        public static void main(String[] args)
        {
                int[] arr = {1,2,3,4,5,6,7,8};     //定义一个一维数组其中a[0]=1......
                int pos = -1;  //应该起标记作用
                for(int x=0;x<arr.length-1; x++)     //遍历该一维数组 第一次:x=0    第二次:x=1  第三次:x=2 第四次:x=3   第五次:x=4  第六次:x= 5 第七次:x=6
                {
                        for(int y=0; y<3;y++)   //循环三次(使其pos每次加以1)  y=0
                        {
                                pos++;            //pos自增1  pos=0
                                if(pos==arr.length)  //判断pos是否自增为该数组的长度,若是 则pos=0  不成立  第三次成立:pos=0
                                        pos=0;
                                while(arr[pos]==0)//判断该组数中是否有为0的元素  不成立
                                {
                                        pos++;
                                        if(pos==arr.length)
                                                pos=0;
                                }                           
                        }                    第一次 : 嵌套的for循环结束后 pos=2         第二次:pos=5   第三次:pos=0  第四次:pos=2  第五次:pos=0 第六次:pos = 0 第七次:pos=0
                        arr[pos] = 0;       // arr【2】=0   arr【5】= 0    arr【0】=0 。。。。
                        //System.out.println(arr[pos]);
                }
                for(int x=0; x<arr.length; x++)
                {
                        if(arr[x]!=0)
                        {
                                System.out.println(arr[x]);  想必输出的事arr[1] = 2
                                break;
                        }
                }
        }
}
该题目的要求恐怕就是要使数组角标为0,2,5的元素的值为0;我没验证,若错误了请谅解。
回复 使用道具 举报
这个题的题目还真猜不出,

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++)//会循环7次
                {
                        for(int y=0; y<3;y++)//此循环结束一次会对arr[pos]赋值为0
                        {
                                pos++;

                                if(pos==arr.length)
                                        pos=0;
                                while(arr[pos]==0)
                                {
                                        pos++;
                                        if(pos==arr.length)
                                                pos=0;
                                }
                        }
                        arr[pos] = 0;//for循环每结束一次,将0赋值给arr[pos].依次赋值角标2、5、0、4、1、7、3值为0
                }

                for(int x=0; x<arr.length; x++)
                {
                        if(arr[x]!=0)//将数组中第一个值不为0的打印
                        {
                                System.out.println(arr[x]);//打印出arr[6]的值7
                                break;
                        }
                }
        }
}
回复 使用道具 举报
此程序要解决什么,真不知道。不过要是把这个程序看做小朋友玩游戏的话,可以这么理解。8个小朋友手拉手围成圈报数。从其中一个小朋友开始开始报数,只喊123,报的是3的小朋友退出。其余小朋友围成圈继续。直到剩下一个小朋友为止。这个便是幸运的小朋友或者倒霉的小朋友  喔喔
回复 使用道具 举报
张向辉 发表于 2013-2-14 20:47
此程序要解决什么,真不知道。不过要是把这个程序看做小朋友玩游戏的话,可以这么理解。8个小朋友手拉手围 ...

为何int pos=-1呢 谢谢
回复 使用道具 举报
武奇伟 发表于 2013-2-15 21:27
为何int pos=-1呢 谢谢

这是为了第一次循环时 pos++  = 0,   数组角标是从零开始的。
回复 使用道具 举报
张向辉 发表于 2013-2-15 21:33
这是为了第一次循环时 pos++  = 0,   数组角标是从零开始的。

:lol谢了
回复 使用道具 举报
李培根 发表于 2013-2-14 19:12
这个题的题目还真猜不出,

class LuckNumber

问题已改成已解决 :lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马