黑马程序员技术交流社区

标题: 10转16进制 输出结果不对 char默认0 实际输出是a ? [打印本页]

作者: Sky丶    时间: 2015-5-18 21:28
标题: 10转16进制 输出结果不对 char默认0 实际输出是a ?
十进制转换16进制程序  按照程序输出应该是0000003c ,但是实际输出是aaaaaa3c。  char的默认值不是0吗?怎么输出是a?我已经详细的对比了程序和老师的一样(ps:for(int x=0;x<arr.length;x++) 我把int x=pos  改成 x=0 了  不然 显示不出多余的 数 ) 我自己定义了一个数组 默认输出是a  求大神解答?
class  Text1
{
        public static void main(String[] args)
        {
               
                char[] abc=new char[4];
                System.out.println(abc[3]+"!");
                toHex(60);
               
        }
                public static void toHex(int num)
        {
                char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                char[] arr=new char[8];
                int pos=arr.length;
                while(num!=0)
                {
                        int temp=num&15;
                        //System.out.println(chs[temp]);
                        arr[--pos]=chs[temp];
                        num=num>>>4;
                }
                //储存数据arr的遍历
                for(int x=0;x<arr.length;x++)
                {
                         System.out.print(arr[x]+",");
                }
        }
}

QQ截图20150518211807.png (1.4 KB, 下载次数: 48)

输出结果

输出结果

作者: QQheima    时间: 2015-5-18 21:28
应该是你的字符数组arr初始化有问题,应该是字符数组初始化的时候里面默认值是'a',你打印一下看看。
  1. class  ToHexDemo
  2. {
  3.          public static void main(String[] args)
  4.         {
  5.                         toHex(60);
  6.                        
  7.         }
  8.        
  9.         public static void toHex(int num)
  10.         {
  11.                         char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  12.                         char[] arr=new char[8];
  13.                         //打印一下arr,看看里面初始化的内容
  14.                         System.out.print("初始化arr:");
  15.                         sopArr(arr);
  16.                         int pos=arr.length;
  17.                         while(num!=0)
  18.                         {
  19.                                         int temp=num&15;
  20.                                         //System.out.println(chs[temp]);
  21.                                         arr[--pos]=chs[temp];
  22.                                         num=num>>>4;
  23.                         }
  24.                         //打印一下arr,看看里面的赋值内容
  25.                         System.out.print("\n\n给arr赋值后:");
  26.                         sopArr(arr);
  27.         }

  28.         //打印方法
  29.         public static void sopArr(char[] arr){
  30.                 //输出arr里面的内容
  31.                 System.out.println("\narr里面的内容是:");
  32.                 for(int x=0;x<arr.length;x++)
  33.                 {
  34.                                  System.out.print(arr[x]+",");
  35.                 }
  36.                 System.out.println("\narr里面的字节对应的ASCII码是:");
  37.                 //讲arr里面的字节转换成ASCII输出
  38.                 for(int x=0;x<arr.length;x++)
  39.                 {
  40.                                  System.out.print((int)arr[x]+",");
  41.                 }
  42.         }
  43. }
复制代码

打印结果是:



作者: 被淹死的虫子    时间: 2015-5-19 07:53
最后的for循环条件不对
作者: 被淹死的虫子    时间: 2015-5-19 08:03
被淹死的虫子 发表于 2015-5-19 07:53
最后的for循环条件不对

额。。。。没看全问题,囧了!是解决a不是解决多余数字。。。我自己机子上运行没有你的问题
作者: 枕寒流    时间: 2015-5-19 08:12
很诡异啊,,,,,
作者: 笔墨痕干    时间: 2015-5-19 11:04
[code]class  Text1
{
        public static void main(String[] args)
        {
               
                toHex(60);      
        }
        public static void toHex(int num)
        {
                char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                char[] arr=new char[8];
                int pos=arr.length;
                while(num!=0)
                {
                        int temp=num&15;
                        System.out.println(chs[temp]);
                        arr[--pos]=chs[temp];
                        num=num>>>4;
            
                }
                //储存数据arr的遍历
                for(int x=pos;x<arr.length;x++)
                {
                         System.out.print(arr[x]+",");
                }
        
        }
}

作者: Sky丶    时间: 2015-5-19 20:01
QQheima 发表于 2015-5-19 10:33
应该是你的字符数组arr初始化有问题,应该是字符数组初始化的时候里面默认值是'a',你打印一下看看。

打印 ...

恩 class  Text1
{
        public static void main(String[] args)
        {
               
                char[] abc=new char[4];
                System.out.println(abc[3]+"!");
                toHex(60);
               
        }
原程序测试了  默认输出是a  不知道怎么回事

作者: Sky丶    时间: 2015-5-19 20:27
难道要 换系统?刚买的的电脑 换个盗版系统感觉对不起正版的钱 。。。。。。
作者: Sky丶    时间: 2015-5-21 09:45
QQheima 发表于 2015-5-18 21:28
应该是你的字符数组arr初始化有问题,应该是字符数组初始化的时候里面默认值是'a',你打印一下看看。

打印 ...

我想问下怎么解决这个问题 ?

QQ截图20150521094359.png (8.83 KB, 下载次数: 43)

QQ截图20150521094359.png

作者: QQheima    时间: 2015-5-21 11:14
Sky丶 发表于 2015-5-21 09:45
我想问下怎么解决这个问题 ?

不知道,这个ASCII表是系统的吧,没设置过,这个给你一个ASCII码对照
作者: 何雨    时间: 2015-5-21 17:45


你的a是怎么出来的呢?

作者: Sky丶    时间: 2015-5-23 12:32
QQheima 发表于 2015-5-21 11:14
不知道,这个ASCII表是系统的吧,没设置过,这个给你一个ASCII码对照

好吧 谢谢了
作者: Sky丶    时间: 2015-5-23 12:34
何雨 发表于 2015-5-21 17:45
你的a是怎么出来的呢?

估计是主板问题  换了系统还是不行  不影响编程  先这样用着吧
作者: 挖煤黑小伙    时间: 2015-5-31 13:41
我咋复制楼主的出来的是  , , , , , ,3,c呢?

作者: dyy8023xy    时间: 2015-6-29 18:34
好神奇 你的a咋出来




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