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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓熊财 中级黑马   /  2015-3-28 09:54  /  786 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Lx06
{
        public static void main(String[] args)
        {
                show(13);
        }
        public static void show(int num)
        {
                char[] arr = {'0','1'};
                char[] min = new char[32];
                int pos = min.length;
                while (num!=0)
                {
                        int tem = num&1;
                        min[--pos] = arr[tem];
                        num = num>>>1;
                }
                for (int x= pos;x<arr.length ;x++ )
                {
                        System.out.print(min[x]);
                }
        }
}

4 个回复

倒序浏览
public class Lx06
{
        public static void main(String[] args)
        {
                show(13);
        }
        public static void show(int num)
        {
                char[] arr = {'0','1'};
                char[] min = new char[32];
                int pos = min.length;
                while (num!=0)
                {
                        int tem = num&1;
                        min[--pos] = arr[tem];
                        num = num>>>1;
                }
                for (int x= pos;x<min.length ;x++ )//是x<min.length,不是<arr.length.
                {
                        System.out.print(min[x]);
                }
        }
}

for循环的条件写错了,应该是x<min.length。
回复 使用道具 举报
hellotaomi 发表于 2015-3-28 10:16
public class Lx06
{
        public static void main(String[] args)

非常感谢,但是这里有一个问题我一直很郁闷,表示不能理解,为什么最后是x++呢?不是x=pos 呢吗?X++那不是会超出角标吗?POS代表的是MIn。length的最大角标,x有等于pos为嘛是加加呢?帮帮解释下谢谢
回复 使用道具 举报
邓熊财 发表于 2015-3-28 10:22
非常感谢,但是这里有一个问题我一直很郁闷,表示不能理解,为什么最后是x++呢?不是x=pos 呢吗?X++那不 ...

程序一开始是pos = min.length,也就是min数组的最大角标,但经过while循环内min[--pos]后,每循环一次,pos就位置就从大角标位子往小的角标位子移动一位,比如一开始pos=31,循环一次就变成pos=30了,循环结束后pos的角标就处在0和min.length之间的某一位上了。比如最后停在25,那么数组min中只有25到31这些角标位子数组内存入了前面 tem = num&1 运算出来的数字。这些也才是真正有用的数字,后面再用for循环再把min数组中存入的数字一个个打印出来,此时x=pos=25;x<32; x++,也就是打印从25到31角标的数字,当然是从25加到31咯,懂了木有。
回复 使用道具 举报
hellotaomi 发表于 2015-3-28 10:46
程序一开始是pos = min.length,也就是min数组的最大角标,但经过while循环内min[--pos]后,每循环一次, ...

谢谢明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马