黑马程序员技术交流社区

标题: 怎么什么都没有呢? [打印本页]

作者: 邓熊财    时间: 2015-3-28 09:54
标题: 怎么什么都没有呢?
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]);
                }
        }
}


作者: hellotaomi    时间: 2015-3-28 10:16
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。
作者: 邓熊财    时间: 2015-3-28 10:22
hellotaomi 发表于 2015-3-28 10:16
public class Lx06
{
        public static void main(String[] args)

非常感谢,但是这里有一个问题我一直很郁闷,表示不能理解,为什么最后是x++呢?不是x=pos 呢吗?X++那不是会超出角标吗?POS代表的是MIn。length的最大角标,x有等于pos为嘛是加加呢?帮帮解释下谢谢
作者: hellotaomi    时间: 2015-3-28 10:46
邓熊财 发表于 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咯,懂了木有。
作者: 邓熊财    时间: 2015-3-28 11:13
hellotaomi 发表于 2015-3-28 10:46
程序一开始是pos = min.length,也就是min数组的最大角标,但经过while循环内min[--pos]后,每循环一次, ...

谢谢明白了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2