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

michaelzzz

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© michaelzzz 初级黑马   /  2014-5-10 13:45  /  1161 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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;反而会提示数组角标溢出,请问为什么?

1 个回复

倒序浏览
  arr[--pos]=biao[temp];

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

当数组中的元素存满时,arr[--pos]中的最后一个元素是存储在0角标中的,如果设置 int pos=arr.length-1,当pos=0时, --pos就是 -1  这时再存储元素就会出现角标越界的情况。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马