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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 湛添友 中级黑马   /  2014-3-24 21:28  /  848 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Shiliu{
public static void toHex(int a)
{StringBuffer sb=new StringBuffer();

for(;a>0;a=a>>>4)
    {
   int x=a&15;
    if(x>9)
    sb.append((char)(x-10+'A'));
    if(x<=9)
    sb.append(x);
  
    }
    System.out.println(sb.reverse());
}
    public static void main(String[] args){
int n=2560;
toHex(n);
    }

}
这样可以
public class Shiliu{
public static void toHex(int a)
{StringBuffer sb=new StringBuffer();
int y;
for(;a>0;a=a>>>4)
    {
   int x=a&15;
    if(x>9)
    y=(char)(x-10+'A');
    sb.append(y);
    if(x<=9)
    sb.append(x);
  
    }
    System.out.println(sb.reverse());
}
    public static void main(String[] args){
int n=2560;
toHex(n);
    }

}
为什么这样不可以?

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
y=(char)(x-10+'A');这一句楼主将char类型赋值给int类型,会存在类型提升,类型提升后sb.append(y)相当于sb.append(int y);

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
错误1:int y:y是局部变量(就是定义在方法上或方法内部的变量),需要初始化。比如int y=0;或者 int y=(x-10+'A');
错误2.int y ;表示y是int型。而  y=(char)(x-10+'A');(char)表示将(x-10+'A')的结果强转为char类型,所以int=char,出错。
错误3.if(x>9)
    y=(char)(x-10+'A');
    sb.append(y);   if()语句如果不加{},表示只执行if下面的一行代码。所以  sb.append(y);没有被执行到。
  有if最好就加{},毕老师那是图方便,人家熟练。
代码已改。
public class Shiliu{
public static void toHex(int a)
{StringBuffer sb=new StringBuffer();
int y=0;//改动
for(;a>0;a=a>>>4)
    {
   int x=a&15;
    if(x>9)
        {//加了大括号
    y=(x-10+'A');//改动
    sb.append((char)y);//改动
        }
    if(x<=9)
    sb.append(x);
  
    }
    System.out.println(sb.reverse());
}
    public static void main(String[] args){
int n=2560;
toHex(n);
    }
}
运行结果;
D:\Java\day21>java lianxi
A00

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报

RE: 我是新手,求助

谭荣强 发表于 2014-3-24 23:32
错误1:int y:y是局部变量(就是定义在方法上或方法内部的变量),需要初始化。比如int y=0;或者 int y=(x ...

分析的很透彻!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马