黑马程序员技术交流社区

标题: 关于查表法进制互转的一个问题 [打印本页]

作者: michaelzzz    时间: 2014-5-10 13:45
标题: 关于查表法进制互转的一个问题
本帖最后由 michaelzzz 于 2014-5-10 17:17 编辑

public static void fangfa(int num,int yude,int yide)
        {
                if(num==0)
                        {
                                System.out.println(0);
                                return ;
                        }
                char[] biao={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};        
                char[] arr=new char[32];
                int pos =arr.length;
                while(num!=0)
                {
                        int temp=num & yude;
                        arr[--pos]=biao[temp];
                        num=num>>>yide;
                }
                for(int x=pos;x<arr.length;x++)
                {
                        System.out.print(arr[x]);
                }
        }

这是毕向东java基础第四天的视频中的内容,图中红色部分,POS指针的初始化值为数组的长度,而在for循环中遍历数组时,角标x的初始化值也为POS,照理讲,角标的最大值应为arr.length-1,为什么运行时不报错呢,如果改为int POS=arr.length-1;反而会提示数组角标溢出,请问为什么?
作者: 蓝雨星空    时间: 2014-5-12 08:54
  arr[--pos]=biao[temp];

这句代码,pos是先自减再存储arr,在arr存储时,它的第一个元素其实是存储在length-1的角标中的,所以不会出现角标越界。

当数组中的元素存满时,arr[--pos]中的最后一个元素是存储在0角标中的,如果设置 int pos=arr.length-1,当pos=0时, --pos就是 -1  这时再存储元素就会出现角标越界的情况。





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