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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liuxiang 中级黑马   /  2014-9-16 15:32  /  1889 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

转换成十六进制,利用数组保存转换后的十六进制数,并打印。为什么编译arr1[--pos]=arr[a];时提示访问到了数组不存在的角标,看到头大也没看出来问题,求教大神啊
  1. public static void main(String[] args)
  2.         {
  3.                 toHex(60);
  4.         }
  5.         public static void toHex(int num)
  6.         {
  7.                 char[] arr ={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  8.                 char[] arr1 =new char[8];//定义一个数组容器,保存十六进制数
  9.                 int pos = 8;
  10.                 for (int x=0;x<8 ;x++ )
  11.                 {
  12.                         int a = num & 15;
  13.                         arr1[--pos]=arr [a];
  14.                         System.out.print(arr1[--pos]);
  15.                         num = num >>> 4;
  16.                 }
复制代码

5 个回复

正序浏览
这段代码是抄的毕老师的 还是自己写的啊  小狼
回复 使用道具 举报
xplcc 发表于 2014-9-16 16:18
角标越界 14行 System.out.print(arr1[--pos]);在运行时--pos又再次自动减一,导致每次循环pos数值减二,最 ...

谢谢了,看明白了
回复 使用道具 举报
角标越界 14行 System.out.print(arr1[--pos]);在运行时--pos又再次自动减一,导致每次循环pos数值减二,最终在for循环进行到第六次时pos=-2报出角标越界错误
回复 使用道具 举报
  arr1[--pos]=arr [a];
System.out.print(arr1[--pos]);
在这里pos--了两次了!!!!
回复 使用道具 举报
  1.         public static void toHex(int num){
  2.                 char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  3.                
  4.                 //定义一个临时容器
  5.                 char[] arr = new char[8];
  6.                 int pos = arr.length;//定义指针
  7.                
  8.                 while(num!=0){
  9.                         int temp = num & 15;
  10.                         //System.out.println(chs[temp]);
  11.                         arr[--pos] = chs[temp];
  12.                         num = num >>>4;
  13.                 }

  14.                 //存储数据的arr数组遍历
  15.                 for(int x=pos;x<arr.length;x++){
  16.                         System.out.println(arr[x]+",");
  17.                 }
  18.         }
复制代码

你可以再看一下毕老师的基础视频,day04中查表法十进制转十六进制的视频,定义一个指针,用while循环,在循环中不再输出结果,而是将结果存到数组中,然后再通过遍历数组将结果输出
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马