黑马程序员技术交流社区

标题: 十进制转换 [打印本页]

作者: 邵阳    时间: 2012-6-23 10:15
标题: 十进制转换
本帖最后由 邵阳 于 2012-6-23 18:12 编辑
  1. class Shao
  2. {
  3. public static void main(String[] args)
  4. {
  5. shao_2(-60);
  6. }


  7. public static void shao_1(int key,int a,int b)
  8. {
  9. char []chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};
  10. char[]chr=new char[32];
  11. int pose=0;

  12. while( key!=0)
  13. {
  14. int temp=key&a;
  15. chr[pose++]=chs[temp];
  16. key=key>>>b;

  17. }
  18. for (int x=pose-1;x>=0 ;x-- )
  19. {
  20. System.out.print(chr[x]+",");
  21. }

  22. }

  23. public static void shao_2(int key)
  24. {
  25. shao_1(key,15,4);
  26. }
  27. public static void shao_3(int key)
  28. {
  29. shao_1(key,1,1);
  30. }
  31. public static void shao_4(int key)
  32. {
  33. shao_1(key,7,3);
  34. }
  35. }
复制代码
我输入数字是-60 ,然后可以正确转化成二进制,八进制。但是十六进制却出现
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
        at Shao.shao_1(Demo.java:68)
        at Shao.shao_2(Demo.java:81)
        at Shao.main(Demo.java:7)
我知道这个意思是数组的上限超出了,但是还是不知道错误在哪,还有如何改正。






另外就是能不能详细讲一下为什么

chr[pose++]=chs[temp];    这里多增一次啊
所以 int  x=pose-1。
把运算过程写一下吧。比老师没有讲明白

作者: 黑马-李勇    时间: 2012-6-23 10:22
十六进制的F去哪了?
作者: 黑马-李勇    时间: 2012-6-23 10:28
chr[pose++]=chs[temp];    是pose++运算完再加1(当pose是最后一个的时候,pose运算时是你要的数据,但后面还有一个++,所以要加1然后再回去判断,这时条件不满足了,但结果已经是加1后的了。
作者: 邵阳    时间: 2012-6-23 10:32
黑马-李勇 发表于 2012-6-23 10:22
十六进制的F去哪了?

知道啦,一时疏忽,见笑
作者: 邵阳    时间: 2012-6-23 10:34
黑马-李勇 发表于 2012-6-23 10:28
chr=chs[temp];    是pose++运算完再加1(当pose是最后一个的时候,pose运算时是你要的数据,但后面还有一 ...

还是不明白,能不能运算过程一个一个写下来,还有这个a++和++a,在这的详细用法

作者: 挥手遗忘    时间: 2012-6-23 10:42
char []chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'}; //少了一个F
chr[pose++]=chs[temp];//每赋值一次后 pose就加一次,所以说pose的值 比实际位数多了一位数   打印的时候自然要再pose-1 一次
作者: 挥手遗忘    时间: 2012-6-23 10:52
char []chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};//少一个F
chr[pose++]=chs[temp];// pose没赋值一次后 pose就自动加一次  所以在赋值完后pose的位数比实际位多一位  打印的时候自然要再pose-1一下


作者: 黑马-李勇    时间: 2012-6-23 11:21
class Shao
{
public static void main(String[] args)
{
shao_2(-60);
}

public static void shao_1(int key,int a,int b)
{
char []chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[]chr=new char[32];
int pose=-1;//初始下,因为用的是++pose为了操作脚标0,这时只能是-1了
while( key!=0)
{
int temp=key&a;
chr[++pose]=chs[temp];
key=key>>>b;
}
for (int x=pose-1;x>=0 ;x-- )
{
System.out.print(chr[x]+",");
}
}
public static void shao_2(int key)
{
shao_1(key,15,4);
}
}


guocheng.JPG (26.6 KB, 下载次数: 22)

guocheng.JPG

作者: 孙飞    时间: 2012-6-23 11:26
因为你创建的用来查表的数组少了F,所以范围就会不一样了,所以出错。你这里chr[pose++]=chs[temp];是在做完赋值运算后会自增一次,所以下面要先减一才得到的是最大角标值




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