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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tesla时光 中级黑马   /  2012-7-19 01:44  /  1397 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 翁发达 于 2012-7-19 08:44 编辑

我边看视频,学着自已写了一函数,用来作进制转换。
可是结果60转16进制老是显示C3C,我怎么检查也没查出是哪里的问题,我都眼花缭乱了,请哪位朋友帮忙指出错误,谢谢
class  ZhuanHuan
{
        public static void main(String[] args)
        {
               
                toBin(60);
        }
        public static void toBin(int x)
        {
                zhuanHuan(x,15,4);
        }
        public static void zhuanHuan(int x,int y,int z)
                {
                        if (x==0)
                        {        
                                System.out.println(0);
                                return;
                        }
                        char[] arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                        char[] arr1=new char[32];
                        int pos =arr1.length;
                        
                        while (x!=0)
                        {
                                if (y==1)
                                {
                                        int a = x&y;
                                        arr1[--pos]=arr[a];
                                        x= x >>>z;
                                }
                                if (y==7)
                                {
                                        int a = x&y;
                                        x=x>>>z;
                                        arr1[--pos]=arr[a];
                                }
                                if (y==15)
                                {
                                        int a = x&y;
                                        arr1[--pos]=arr[a];
                                        x=x>>>z;
                                       
                                }
                                for (int b=pos;b<arr1.length ;b++ )
                                {
                                      System.out.print(arr1);
                                }
                       }
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

6 个回复

倒序浏览
    for (int b=pos;b<arr1.length ;b++ )
                                 {
                                         System.out.print(arr1[b]);
                                 }
问题出在这里,直接打印  System.out.print(arr1[pos]);就出c3了
若是加上那个循环,再第二次循环的时候,for走了两次,就出现c3c了。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
改一下就欧了
class  ZhuanHuan
{
        public static void main(String[] args)
        {
               
                toBin(60);
        }
        public static void toBin(int x)
        {
                zhuanHuan(x,15,4);
        }
        public static void zhuanHuan(int x,int y,int z)
                {
                        if (x==0)
                        {        
                                System.out.println(0);
                                return;
                        }
                        char[] arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                        char[] arr1=new char[32];
                        int pos =arr1.length;
                        
                        while (x!=0)
                        {
                                        int a = x&y;
                                        arr1[--pos]=arr[a];
                                        x=x>>>z;
                                       
                              
                        }
                                
                       for (int b=pos;b<arr1.length ;b++ )//你把输出 语句放在循环语句里面了,第一次把C赋给最大角标位时就打印一次了,然后再赋时又打印一次,又没换行,就是C3C了,如果数再大点,打印就不止二次了,就该放外面就欧了
                                {
                                        System.out.print(arr1);
                                }
                }
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
周坤 发表于 2012-7-19 07:48
for (int b=pos;b

明白,谢谢!
回复 使用道具 举报
翁发达 发表于 2012-7-19 08:07
明白,谢谢!

明白,谢谢!
回复 使用道具 举报
  1. class  ZhuanHuan
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                
  6.                 toBin(60);
  7.         }
  8.         public static void toBin(int x)
  9.         {
  10.                 zhuanHuan(x,15,4);
  11.         }
  12.         public static void zhuanHuan(int x,int y,int z)
  13.                 {
  14.                         if (x==0)
  15.                         {        
  16.                                 System.out.println(0);
  17.                                 return;
  18.                         }
  19.                         char[] arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  20.                         char[] arr1=new char[32];
  21.                         int pos =arr1.length;
  22.                         
  23.                         while (x!=0)
  24.                         {
  25.                                                            //二进制
  26.                                 if (y==1)
  27.                                 {
  28.                                         int a = x&y;
  29.                                         arr1[--pos]=arr[a];
  30.                                         x= x >>> z;
  31.                                 }
  32.                                                                 //八进制
  33.                                 if (y==7)
  34.                                 {
  35.                                         int a = x&y;
  36.                                        
  37.                                         arr1[--pos]=arr[a];

  38.                                                                                  x=x>>>z;
  39.                                 }
  40.                                                                 //十六进制
  41.                                 if (y==15)
  42.                                 {
  43.                                         int a = x&y;//"与"一下
  44.                                                                                
  45.                                                                                 //System.out.println(a);

  46.                                         arr1[--pos]=arr[a];
  47.                                                                                
  48.                                                                                 x=x>>>z;
  49.       
  50.                                        
  51.                                 }
  52.                                                                 //System.out.println("pos="+pos);
  53.                                                                 /*
  54.                                                                 不能将for循环定义在while里面
  55.                                                                 for (int b=pos;b<arr1.length ;b++ )
  56.                                 {
  57.                                         System.out.print(arr1[b]);
  58.                                 }
  59.                                                                 */
  60.                         }
  61.                                                   for (int b=pos;b<arr1.length ;b++ )
  62.                                 {
  63.                                         System.out.print(arr1[b]);
  64.                                 }
  65.                                 
  66.                
  67.                 }
  68. }
复制代码
给你找了半天,才找出来,我的头有点大了

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
全海波 发表于 2012-7-19 08:08
给你找了半天,才找出来,我的头有点大了

谢了,我昨晚差点找崩溃了,整到两点都没搞定,原来问题在这里,早知道就尽早放在论坛里问问,呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马