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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李红亮 于 2013-12-8 18:13 编辑

程序是这样的:

class ArrayTest7
{
        public static void main(String[] args)
        {
                toBin(6);
        }
        
        //十进制转换为二进制
        public static void toBin(int num)
        {
                trans(num,1,1);
        }
        
        //十进制转换为八进制
        public static void toBa(int num)
        {
                trans(num , 7 , 3);
        }
        
        //十进制转换为十六进制
        public static void toHex(int num)
        {
                trans(num , 15 , 4);
        }
        public static void trans(int num , int base , int offset)
        {
                char[] chs = {'0','1','2','3'
                                ,'4','5','6','7'
                                ,'8','9','A','B'
                                ,'C','D','E','F'};
                int[] arr = new int[32];
                int pos = arr.length;
                while(num != 0)
                {
                        int temp = num & base;
                        arr[--pos] = chs[temp];
                        num = num >>>offset;
                }
                for(int x = pos ; x < arr.length ; x++)
                {
                        System.out.print(arr[x]);
                }               
        }
}

问:运行结果不是应该为110的吗?怎么我的结果是494948?
看了好几遍,没有看出那里错了,大家帮帮看看是哪里出问题了,谢谢.

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 wangchao1686 于 2013-12-8 18:01 编辑

原因在于,你用int[] 数组存放的是字符所对应的编码值。
修改如下
  1. public class test {
  2.         public static void main(String[] args)
  3.     {
  4.             toBin(6);
  5.     }
  6.    
  7.    //十进制转换为二进制
  8.     public static void toBin(int num)
  9.     {
  10.             trans(num,1,1);
  11.     }
  12.    
  13.    //十进制转换为八进制
  14.     public static void toBa(int num)
  15.     {
  16.             trans(num , 7 , 3);
  17.     }
  18.    
  19.    //十进制转换为十六进制
  20.     public static void toHex(int num)
  21.     {
  22.             trans(num , 15 , 4);
  23.     }
  24.     public static void trans(int num , int base , int offset)
  25.     {
  26.             char[] chs = {'0','1','2','3'
  27.                             ,'4','5','6','7'
  28.                             ,'8','9','A','B'
  29.                             ,'C','D','E','F'};
  30.            char[] arr = new char[32];  //原因就在这里,要存储的是字符,你用int数组存储,当然存的是字符的编码了  
  31.             int pos = arr.length;
  32.             while(num != 0)
  33.             {
  34.                     int temp = num & base;
  35.                     arr[--pos] = chs[temp];
  36.                     num = num >>>offset;
  37.             }
  38.             for(int x = pos ; x < arr.length ; x++)
  39.             {
  40.                     System.out.print(arr[x]);
  41.             }               
  42.    }
  43. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报 1 0
您好,我自习看了一下你的程序,找出了错误运行得到了110!void trans()函数中arr数组应该是char型的!
  1. package com.day02;
  2. class ArrayTest7
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 toBin(6);
  7.         }
  8.       
  9.         //十进制转换为二进制
  10.         public static void toBin(int num)
  11.         {
  12.                 trans(num,1,1);
  13.         }
  14.       
  15.         //十进制转换为八进制
  16.         public static void toBa(int num)
  17.         {
  18.                 trans(num , 7 , 3);
  19.         }
  20.       
  21.         //十进制转换为十六进制
  22.         public static void toHex(int num)
  23.         {
  24.                 trans(num , 15 , 4);
  25.         }
  26.         public static void trans(int num , int base , int offset)
  27.         {
  28.                 char[] chs = {'0','1','2','3'
  29.                                 ,'4','5','6','7'
  30.                                 ,'8','9','A','B'
  31.                                 ,'C','D','E','F'};
  32.                 char[] arr = new char[32];
  33.                 int pos = arr.length;
  34.                 while(num != 0)
  35.                 {
  36.                         int temp = num & base;
  37.                         arr[--pos] = chs[temp];
  38.                         num = num >>>offset;
  39.                 }
  40.                 for(int x = pos ; x < arr.length ; x++)
  41.                 {
  42.                         System.out.print(arr[x]);
  43.                 }               
  44.         }
  45. }
复制代码

希望可以帮到你!

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
wangchao1686 发表于 2013-12-8 17:58
原因在于,你用int[] 数组存放的是字符所对应的编码值。
修改如下

恩,修改通过了,谢谢.粗心了点(*^__^*)
回复 使用道具 举报
翼展哈哈 发表于 2013-12-8 17:59
您好,我自习看了一下你的程序,找出了错误运行得到了110!void trans()函数中arr数组应该是char型的!

希 ...

恩,修改通过了,谢谢.粗心了点(*^__^*)
回复 使用道具 举报
李红亮 发表于 2013-12-8 18:11
恩,修改通过了,谢谢.粗心了点(*^__^*)

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