黑马程序员技术交流社区

标题: 请教:关于用for循环来转换进制问题; [打印本页]

作者: 黑龙江—刘鹏    时间: 2012-7-10 09:19
标题: 请教:关于用for循环来转换进制问题;
本帖最后由 黑龙江—刘鹏 于 2012-7-10 12:26 编辑

class chabiaofa
{
        public static void main(String[] args)
        {
               
                toHex(60);
        }        
        public static void toHex(int num)
        {        
                char[] arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                char[] arr1 =new char[8];
                int pos = 0;
                while(num!=0)
                {
                        int temp=num&15;
                                arr1[pos]=arr[temp];
                                pos++;
                                       
                        num=num>>>4;
                        
                }
                for(int y =pos;y>=0;y--)
                        System.out.print(arr1[y]);               
        }
}

这个类的运算结果是 (空格3c)我想问的是如果pos的指针到了arr1的2角标为 那么空格的值应该是0呀

我感觉结果应该是 (03c)为什么是 (空格3c)呢 请教
作者: 曹恒业    时间: 2012-7-10 09:59
本帖最后由 曹恒业 于 2012-7-10 10:12 编辑

class chabiaofa
{
        public static void main(String[] args)
        {
               
                toHex(60);
        }        
        public static void toHex(int num)
        {        
                char[] arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                char[] arr1 =new char[8];
                int pos = 0;
                while(num!=0)
                {
                        int temp=num&15;
                                arr1[pos]=arr[temp];
                                pos++;         //问题出在这里,循环总共执行2次,因为pos的值变化为0,1,2,。所以后面输出时从pos为2开始,所以多了一个空格
                                       
                        num=num>>>4;
                        
                }
                for(int y =pos;y>=0;y--)
                        System.out.print(arr1[y]);               
        }
}

这个类的运算结果是 (空格3c)我想问的是如果pos的指针到了arr1的2角标为 那么空格的值应该是0呀

我感觉结果应该是 (03c)为什么是 (空格3c)呢 请教?
因为char类型的默认初始值是'u\0000',所以是空格,不是0

针对楼主的问题,最简单直接的改动如下:

class chabiaofa
{
        public static void main(String[] args)
        {
               
                toHex(60);
        }        
        public static void toHex(int num)
        {        
                char[] arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                char[] arr1 =new char[8];
                int pos = 0;
                while(num!=0)
                {
                        int temp=num&15;
                                arr1[pos]=arr[temp];                                       
                        num=num>>>4;
                        if(num!=0)                    //在pos自增之前,先判断num是否已经为0,如此可避免产生多余的空格
                                pos++;
                        
                }
                for(int y =pos;y>=0;y--)
                        System.out.print(arr1[y]);               
        }
}

希望有帮到你~~



作者: 何旭栋    时间: 2012-7-10 10:04
因为char类型的默认初始值是'u\0000',所以是打印(空格3c)而不是(03c)
作者: 朱东方    时间: 2012-7-10 10:08
本帖最后由 朱东方 于 2012-7-10 10:14 编辑
  1. class chabiaofa
  2. {
  3.          public static void main(String[] args)
  4.          {
  5.                  
  6.                 toHex(60);
  7.          }        
  8.         public static void toHex(int num)
  9.          {        
  10.                 char[] arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  11.                  char[] arr1 =new char[8]; // char类型数组默认值为'\u0000',打印出来就是 空格 了。
  12.                  int pos = 0;
  13.                  while(num!=0)
  14.                  {
  15.                          int temp=num&15;
  16.                                  arr1[pos]=arr[temp];
  17.                                  pos++;   //pos的值变成了2,多加了个1
  18.                                          
  19.                         num=num>>>4;
  20.                         
  21.                 }
  22.                  for(int y =pos-1;y>=0;y--)   //pos的值是2,数组打印的的是arr1[2] arr1[1] arr1[0]
  23.                          System.out.print(arr1[y]);               
  24.         }
  25. }
复制代码

作者: 黑龙江—刘鹏    时间: 2012-7-10 10:12
何旭栋 发表于 2012-7-10 10:04
因为char类型的默认初始值是'u\0000',所以是打印(空格3c)而不是(03c)

哦哦 谢谢啊  竟然是初始化就是空格啊 跟int的搞错了啊 int的是0
作者: 姬仁贵    时间: 2012-7-10 10:14
本帖最后由 姬仁贵 于 2012-7-10 10:16 编辑
  1. class  SixteenShift
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                
  6.                 seHom(60);        

  7.         }

  8.         public static void seHom(int num)
  9.         {

  10.                 char [] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  11.                 char [] arr = new char[8];
  12.                 int pos = arr.length;//令pos等于arr数组的长度
  13.                 while (num!=0)
  14.                 {
  15.                         int temp = num&15;
  16.                         arr[--pos] = chs[temp];//将num&15后的数值、在chs数组里面查找相对应的字符存入arr数组的最后一个角标里。
  17.                         num = num >>> 4;
  18.                 }
  19.                 for (int x=pos;x<arr.length;x++ )
  20.                 {
  21.                         System.out.print(arr[x]);//正向打印arr里面的字符就是相对应的16进制的数。
  22.                 }
  23. }
  24. }
复制代码

作者: 黑龙江—刘鹏    时间: 2012-7-10 10:17
曹恒业 发表于 2012-7-10 09:59
因为char类型的默认初始值是'u\0000',所以是空格,不是0

针对楼主的问题,最简单直接的改动如下:

嗯  谢谢 够详细
作者: 张頔    时间: 2012-7-10 10:42
class ceshi
{
        public static void main(String[] args)
        {
               
                toHex(60);
        }        
        public static void toHex(int num)
        {        
                char[] arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                char[] arr1 =new char[8];
                System.out.println(arr1[1]+","+arr1[2]+",");  //在这地方我打印了一下arr1里边的东西
                int pos = 0;
                while(num!=0)
                {
                        int temp=num&15;
                                arr1[pos]=arr[temp];
                                pos++;              
                        num=num>>>4;

                        
                }
                System.out.println();
                for(int y =pos;y>=0;y--)
                        System.out.print(arr1[y]);               
        }
}

结果是:
空格,空格,        //这个地方说明在你 char[] arr1 =new char[8];时,只是给你分配了8个内存单元,并没有给里边赋值成0,而是null
空格3c




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