黑马程序员技术交流社区

标题: 问个小问题 转换类型的 [打印本页]

作者: 何周舟    时间: 2012-1-10 06:03
标题: 问个小问题 转换类型的
本帖最后由 何周舟 于 2012-1-12 14:38 编辑

                int a=60,b;
                while(a>0)
                {
                        b=a&15;
                        System.out.print(b>9?(char)((b-10)+'A'):b);
                        a=a>>>4;
                }
十进制转16进制
输出结果 6868
不用IF 不用数组
有不有什么方法把输出结果转换为char
还有为什么输出结果不是char?理论上应该是char啊
作者: 何周舟    时间: 2012-1-10 07:00
等待ING....
作者: 李林轩    时间: 2012-1-10 08:06
本帖最后由 李林轩 于 2012-1-10 08:42 编辑

把输出的结果强制转换就行啦! 如: System.out.println((char)(b>9?((b-9)+'A'):b));

作者: 何周舟    时间: 2012-1-10 08:11
李林轩 发表于 2012-1-10 08:06
把输出的结果强制转换就行啦! 如: System.out.println((char)(b>9?((b-9)+'A'):b));

试了 结果一样 6868
作者: 李林轩    时间: 2012-1-10 08:25
本帖最后由 李林轩 于 2012-1-10 08:41 编辑

我机子上就输出的是D D 啊是不是你输错了!你在检查一下,复制我的代码把你那行输出删了

完整的是:
     int a=60,b;
        while(a>0)
        {
                b=60&15;
                char ch =(char)((b-9)+'A') ;
                System.out.println((char)(b>9?((b-9)+'A'):b));

                  a=a>>>4;
        }

你那个出错的原因是:

表达式1是char类型的变量,表达式2是int类型的变量,没有常量表达式。因此要进行类型提升,把char类型提升为int类型,整个条件运算符结果的类型就是int类型。所以输出结果就是int类型
作者: 何周舟    时间: 2012-1-10 08:41
通宵昏头了 有两个地方我自己写错了 呵呵  一个是 a&15 我写成了 60&15 所以结果是6868 还有一个错误 是应该减10 我写的是减9
这个方法 毕老师的视频里提到过 但是会把后面的3数字也强转为char  
作者: 何周舟    时间: 2012-1-10 08:42
李林轩 发表于 2012-1-10 08:25
我机子上就输出的是D D 啊是不是你输错了!你在检查一下,复制我的代码把你那行输出删了

完整的是:

通宵昏头了 有两个地方我自己写错了 呵呵  一个是 a&15 我写成了 60&15 所以结果是6868 还有一个错误 是应该减10 我写的是减9
这个方法 毕老师的视频里提到过 但是会把后面的3数字也强转为char  不晓得是红桃还是黑桃了
刚刚有一时手贱点错了 回复了
作者: 李林轩    时间: 2012-1-10 08:45
呵呵、解决了就好! 要适当的休息啊 我也要去睡了{:soso_e147:}
作者: 何周舟    时间: 2012-1-10 08:46
本帖最后由 何周舟 于 2012-1-10 08:49 编辑
李林轩 发表于 2012-1-10 08:45
呵呵、解决了就好! 要适当的休息啊 我也要去睡了


呵呵 你也一通宵?

我还在等 等人给我解答

为什么不可以用三元运算

理论可以转char 实际却不可以转

毕老师视频里没提 只是说了 用IF 和数组解决
作者: 李林轩    时间: 2012-1-10 08:48
嗯 睡不着看了一晚视频!还有一部分没看呢,加把劲争取去六期。呵呵
作者: 何周舟    时间: 2012-1-10 08:52
本以为 六期在2-3月开班
看样子去不了
现在已经开班了
二月底就上课了
我也是一晚睡不着
就看看视频
发现前面看的好多又忘了
作者: admin    时间: 2012-1-10 10:32
何周舟 发表于 2012-1-10 08:52
本以为 六期在2-3月开班
看样子去不了
现在已经开班了

抓紧时间。
作者: 李建平    时间: 2012-1-10 10:46
        public static void main(String[] args) {
             int a=60,b;
             long inum = 922337203685477580L;
                while(a>0)
                {
                        b=a&15;
                        char ch =(char)((b-9)+'A') ;
                        System.out.print((char)(b>9?((b-9)+'A'):(b+'0')));

                          a=a>>>4;
                }
        }
作者: 李建平    时间: 2012-1-10 10:48
        public static void main(String[] args) {
             int a=60,b;
             long inum = 922337203685477580L;
                while(a>0)
                {
                        b=a&15;
                        char ch =(char)((b-9)+'A') ;
                        System.out.print((char)(b>9?((b-9)+'A') : (b+'0')));// 这样输出0-9

                          a=a>>>4;
                }
        }
作者: 何周舟    时间: 2012-1-12 03:06
李建平 发表于 2012-1-10 10:48
public static void main(String[] args) {
             int a=60,b;
             long inum = 922337203685477580L;

谢了  我开始怎么没想到+‘0’ 呵呵
class a
{
        public static void main(String[] args)
        {
                int a=60,b;
                while(a>0)
                {
                        b=a&15;
                        System.out.print((char)(b>10?b-10+'A':b+'0'));
                        a=a>>>4;
                }
        }
}




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