黑马程序员技术交流社区
标题:
0000 003C,怎么去掉前面多余的0
[打印本页]
作者:
sydeay
时间:
2014-7-3 15:48
标题:
0000 003C,怎么去掉前面多余的0
今天学10进制转化成16进制,60=3C,可惜用函数写出来显示为0000 003C,怎么把前面多余的0去掉。
我的思考是遇见0就打印空(""),可惜又想到如果是0003 000C,我这种方法肯定错了。
那可怎么办?
作者:
会飞De石头
时间:
2014-7-3 16:07
用 &和位移 的方式进行判断
作者:
燿陚√揚葳
时间:
2014-7-3 17:07
第一种方式可以定义一个容器,然后进行判断
这里要注意一下判断的条件就可以了
代码如下:
<P>public class Demo {
public static void toHex(int num){
StringBuffer sb=new StringBuffer();
for(int x=0;x<8;x++){
int temp=num&15;
//这里要注意判断条件,如果只是temp为0的话那么比如十六进制10A,打印出来就成了1A了
if(num==0&&temp==0){
num=num>>>4;
continue;//满足条件的话就不执行本次循环后的语句,继续本次循环
}
if(temp>9)
sb.append((char)(temp-10+'A'));
else
sb.append(temp);
num=num>>>4;
}
System.out.println(sb.reverse());
}
public static void main(String[] args) {
toHex(266);
}
}</P>
复制代码
还有第二种就是毕老师视屏中讲的查表法
代码如下:
package com.fki;
/*查表法
* 0 1 2 3 4 5 6 7 8 9 A B C D E F
* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
* 1.将所有的元素临时储存起来,建立对应关系每一次&15的值作为索引去查建立好的表,就可以找对应的元素。
* 这样比-10+‘A’简单得多
* 这个表可以通过数据的形式来定义
*
* 结果出来是反着的,可以通过StringBuffer reverse来完成
* 使用数组来完成储存
*
*/
public class Good {
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){ //注意是num!=0,而不是temp,num为零说明这个数就为零了
int temp=num&15;
arr[--pos]=chs[temp];//先完成递减再做存储,如果是pos--则是先存储再做减减
num=num>>>4;
}
System.out.println("pos="+pos);
for(int x=pos;x<arr.length;x++){
System.out.print(arr[x]);
}
}
public static void main(String[] args) {
toHex(60);
}
}
复制代码
作者:
fantacyleo
时间:
2014-7-3 17:30
本帖最后由 fantacyleo 于 2014-7-3 17:42 编辑
lz是把转换后的每一位数字存到数组里的么?这样的话,输出的时候从数组尾部开始循环,从第一个不是0的数字开始输出:
i = arr.length - 1;
while(i >= 0 && arr[i] == 0)i--;
for(j = i; j >=0; j--)
System.out.println(arr[j]);
复制代码
作者:
sydeay
时间:
2014-7-3 18:05
燿陚√揚葳 发表于 2014-7-3 17:07
第一种方式可以定义一个容器,然后进行判断
这里要注意一下判断的条件就可以了
代码如下:
:handshake谢谢,第一种方法更适合我现在的水平。
毕老师那节课,上到最后忘记将怎么去掉前面的0,就结束了。
作者:
Whero
时间:
2014-7-3 18:18
1.可以设置一个判断,当第一次读到非0字符时开始显示,这样前面的0就可以省略,中间的0也可以保存;
2.推荐给楼主一个10转16进制非常方便的方法,采用位运算,下面是我编的这种方法的代码
import java.util.Scanner;
public class ToShiLiu {
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int a=sc.nextInt();
char[] c={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
StringBuffer sb=new StringBuffer("");
boolean flag=true;
if(a==0){
System.out.println(a);flag=false;
}
while(a>0&&flag)
{
String str=sb.toString();
sb=new StringBuffer("");
int t=a&15;
a=a>>>4;
sb.append(c[t]).append(str);
}
System.out.println(sb.toString());
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2