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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

ladx0

初级黑马

  • 黑马币:19

  • 帖子:5

  • 精华:0

小弟菜鸟 希望大神来解答
程序编译时没有问题 运行时出错了 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16
        at Shuzu6.trans(Shuzu6.java:25)
        at Shuzu6.main(Shuzu6.java:5)
---------------------------------------------------------------------------------------------------------------------------
class Shuzu6
{
        public static void main(String[] args)
        {
                trans(60,4,16);
               
        }
        public static void trans(int x,int y,int z)   //x:所要转化的数。y:需要&的位数。z:所要转化的进制数。
        {
                if(x==0)
                {
                System.out.println(0);
                return;
                }
                char[] b={'0','1','2','3',
                          '4','5','6','7',
                          '8','9','A','B',
                          'C','D','E','F'};
                char[] a=new char[32];
                int m=a.length;
               
                while(x!=0)
                {
                   int n=x&z;
                   a[--m]=b[n];
                   x=x>>>y;
                }
                for(int p=m;p<a.length;p++)
                {
                System.out.print(a[p]);
                }
    }
}


8 个回复

倒序浏览
这。。。你有导入过包没
回复 使用道具 举报
唐覃利 发表于 2014-8-12 19:20
这。。。你有导入过包没

我是菜鸟 导入过包是什么意思:)
回复 使用道具 举报
为什么还加if判断,while(x!=0)不成立时就满足了
回复 使用道具 举报
何磊 发表于 2014-8-12 19:49
为什么还加if判断,while(x!=0)不成立时就满足了

函数值等于0时直接输出就可以了 你可以把它当做一个优化吧

还有 为什么我的程序运行不成功啊  问题在哪里啊
求指导
回复 使用道具 举报
我知道哪出错了   y是函数要&的值 因该是15
哎低级错误。
回复 使用道具 举报
应改为trans(60,4,15) Z应该定义为要&的数,转换为十六进制应该是x&15
回复 使用道具 举报
何磊 中级黑马 2014-8-12 21:36:54
8#
ladx0 发表于 2014-8-12 20:30
我知道哪出错了   y是函数要&的值 因该是15
哎低级错误。

呵呵,程序就是这样,刚出去了
回复 使用道具 举报
y是每次循环后要右移的位数,z 是x要与的数  应该z 赋值15,即x & 1111取低四位

你现在输入的是z 是16  x% 0001 0000取到的是第五位的值  加入x的值对应的二进制数第五位为1的话,
int n=x&z;取到的值就是 10000,即n==16,此时再执行下一句语句a[--m] = b[n]; 就会产生角标越界,
就是25行出现的错误。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马