黑马程序员技术交流社区

标题: 进制转换问题,请大家帮忙看看程序,为什么少个】? [打印本页]

作者: haozi050    时间: 2014-1-12 13:42
标题: 进制转换问题,请大家帮忙看看程序,为什么少个】?
本帖最后由 haozi050 于 2014-2-4 20:52 编辑
  1. package day01;
  2. /*需求:完成用户指定的十进制数转成16进制数.(版本2)
  3. * 思路:1,用户指定的十进制数未知,需要定义变量。
  4. * 2,要想转成十六进制,可以获取16进制的每一位,然后合并。怎么获取每一位?通过每次与15然后右移4位就可以得到每一位。
  5. * 3,将得到的每一位存储到数组中,存储过程中判断num是否为0,为0则不再存储。用变量记录住存储的角标位置,然后反向遍历,
  6. * 并存储到字符串变量中,或者逆向存储到属猪中然后存储到字符串中。
  7. * */

  8. public class HexTainslate2 {

  9.         public static void main(String[] args)
  10.         {
  11. //                1,定义变量接受用户指定的十进制数。
  12.                 int num=96;
  13. //                2,调用转换方法得到十六进制字符串
  14.                 String str=trainslate(num);
  15.                 System.out.println(num+"的十六进制是"+str);

  16.         }

  17.         private static String trainslate(int num)
  18.         {
  19.                 if(num==0)
  20.                         return "0";
  21.                 //定义数组用于存储获取的每一位。由于int只有32位,每4位一获取,所以最多只有8个字符
  22.                 char [] ch=new char[8];
  23.                 //定义变量记录最后一次存储在数组中的位置。
  24.                 int index=0;
  25.                 //2,将该数&15获取每一位
  26.                 while(num!=0)
  27.                 {
  28.                         int temp=num&15;
  29.                         //判断是否大于10,是则需要转换
  30.                         /*if(temp>10)
  31.                                 ch[index]=(char)(temp-10+'a');
  32.                         else
  33.                                 ch[index]=(char)(temp-0+'0');*/
  34.                         ch[index]=temp>10?(char)(temp-10+'a'):(char)(temp-0+'0');
  35.                         //3,将该十进制数右移4位。
  36.                         num=num>>>4;
  37.                         index++;
  38.                 }
  39.                         
  40. //                                将数组中字符转成字符串
  41.                                 
  42.                         return toString(ch,index);
  43.         }

  44.         private static String toString(char[] ch,int index)
  45.         {
  46.                 String s="[";
  47.                 for (int i = index-1; i >=0; i--)
  48.                 {
  49.                         if(index!=0)
  50.                         s=s+ch[i]+",";
  51.                         else
  52.                         s=s+ch[i]+"]";
  53.                 }
  54.                 return s;
  55.                
  56.         }

  57. }
复制代码

结果是:96的十六进制是[6,0,

作者: xu6148152    时间: 2014-1-12 14:04
private static String toString(char[] ch,int index)
        {
                String s="[";
                for (int i = index-1; i >=0; i--)
                {
                        if(index!=0)
                        s=s+ch+",";
                        else
                        s=s+ch+"]";
                }
                return s;
               
        }
并没有对index进行操作。index--;
所以else的部分,不会执行。

作者: taoge    时间: 2014-1-12 14:14
  1.         private static String toString(char[] ch,int index)
  2.         {
  3.                 String s="[";
  4.                 for (int i = index-1; i >=0; i--)
  5.                 {
  6.                         if(index!=0)
  7.                         s=s+ch[i]+",";

  8.                 }
  9.                 s=s+"]"; //这里,你把else下面的语句拿出来
  10.                 return s;
  11.                
  12.         }
复制代码





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