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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sydeay 中级黑马   /  2014-7-3 15:48  /  1752 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学10进制转化成16进制,60=3C,可惜用函数写出来显示为0000 003C,怎么把前面多余的0去掉。
我的思考是遇见0就打印空(""),可惜又想到如果是0003 000C,我这种方法肯定错了。
那可怎么办?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

5 个回复

倒序浏览
用 &和位移 的方式进行判断
回复 使用道具 举报
第一种方式可以定义一个容器,然后进行判断
这里要注意一下判断的条件就可以了
代码如下:

  1. <P>public class Demo {
  2. public static void toHex(int num){
  3.   StringBuffer sb=new StringBuffer();
  4.   for(int x=0;x<8;x++){
  5.    
  6.    int temp=num&15;
  7.    //这里要注意判断条件,如果只是temp为0的话那么比如十六进制10A,打印出来就成了1A了
  8.    if(num==0&&temp==0){
  9.     num=num>>>4;
  10.     continue;//满足条件的话就不执行本次循环后的语句,继续本次循环
  11.    }
  12.    if(temp>9)
  13.     sb.append((char)(temp-10+'A'));
  14.    else
  15.     sb.append(temp);
  16.    num=num>>>4;
  17.   }
  18.   System.out.println(sb.reverse());
  19. }
  20. public static void main(String[] args) {
  21.   toHex(266);
  22. }
  23. }</P>
复制代码
还有第二种就是毕老师视屏中讲的查表法
代码如下:
  1. package com.fki;
  2. /*查表法
  3. * 0 1 2 3 4 5 6 7 8 9 A B C D E F
  4. * 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  5. * 1.将所有的元素临时储存起来,建立对应关系每一次&15的值作为索引去查建立好的表,就可以找对应的元素。
  6. * 这样比-10+‘A’简单得多
  7. * 这个表可以通过数据的形式来定义
  8. *
  9. * 结果出来是反着的,可以通过StringBuffer reverse来完成
  10. * 使用数组来完成储存
  11. *
  12. */

  13. public class Good {
  14. public static void toHex(int num){
  15. char[] chs={'0','1','2','3'
  16. ,'4','5','6','7'
  17. ,'8','9','A','B'
  18. ,'C','D','E','F'};
  19. //定义一个临时容器
  20. char[] arr=new char[8];
  21. int pos=arr.length;
  22. while(num!=0){ //注意是num!=0,而不是temp,num为零说明这个数就为零了
  23. int temp=num&15;
  24. arr[--pos]=chs[temp];//先完成递减再做存储,如果是pos--则是先存储再做减减
  25. num=num>>>4;
  26. }
  27. System.out.println("pos="+pos);
  28. for(int x=pos;x<arr.length;x++){
  29. System.out.print(arr[x]);
  30. }
  31. }


  32. public static void main(String[] args) {
  33. toHex(60);
  34. }

  35. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 fantacyleo 于 2014-7-3 17:42 编辑

lz是把转换后的每一位数字存到数组里的么?这样的话,输出的时候从数组尾部开始循环,从第一个不是0的数字开始输出:
  1. i = arr.length - 1;
  2. while(i >= 0 && arr[i] == 0)i--;
  3. for(j = i; j >=0; j--)
  4.     System.out.println(arr[j]);
复制代码





回复 使用道具 举报
燿陚√揚葳 发表于 2014-7-3 17:07
第一种方式可以定义一个容器,然后进行判断
这里要注意一下判断的条件就可以了
代码如下:

:handshake谢谢,第一种方法更适合我现在的水平。
毕老师那节课,上到最后忘记将怎么去掉前面的0,就结束了。
回复 使用道具 举报
1.可以设置一个判断,当第一次读到非0字符时开始显示,这样前面的0就可以省略,中间的0也可以保存;
2.推荐给楼主一个10转16进制非常方便的方法,采用位运算,下面是我编的这种方法的代码
  1. import java.util.Scanner;
  2. public class ToShiLiu {
  3.         public static void main(String args[])
  4.         {
  5.                 Scanner sc=new Scanner(System.in);
  6.                 while(sc.hasNext())
  7.                 {
  8.                         int a=sc.nextInt();
  9.                         char[] c={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  10.                         StringBuffer sb=new StringBuffer("");
  11.                         boolean flag=true;
  12.                         if(a==0){
  13.                                 System.out.println(a);flag=false;
  14.                         }
  15.                         while(a>0&&flag)
  16.                         {
  17.                                 String str=sb.toString();
  18.                                 sb=new StringBuffer("");
  19.                                 int t=a&15;
  20.                                 a=a>>>4;
  21.                                 sb.append(c[t]).append(str);
  22.                         }
  23.                         System.out.println(sb.toString());
  24.                 }
  25.         }
  26. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马