黑马程序员技术交流社区

标题: 我是新手,求助 [打印本页]

作者: 湛添友    时间: 2014-3-24 21:28
标题: 我是新手,求助
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);
    }

}
为什么这样不可以?

作者: yanzhendong    时间: 2014-3-24 21:56
y=(char)(x-10+'A');这一句楼主将char类型赋值给int类型,会存在类型提升,类型提升后sb.append(y)相当于sb.append(int y);
作者: 谭荣强    时间: 2014-3-24 23:32
错误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

作者: 湛添友    时间: 2014-3-25 00:31
标题: RE: 我是新手,求助
谭荣强 发表于 2014-3-24 23:32
错误1:int y:y是局部变量(就是定义在方法上或方法内部的变量),需要初始化。比如int y=0;或者 int y=(x ...

分析的很透彻!!!




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