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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙传磊 于 2013-3-2 15:38 编辑

public class text {
          public static void main (String[] args){
                  toBin(1);
                  toOct(7);
                  toHex(979989897);
          }
            public static void toBin(int num){
                        trans(num,1,1);//此处注意与二进制数1做%运算并无符号右移(>>>)一位
                }
                public static void toOct(int num){
                        trans(num,7,3);//此处注意与二进制数111做%运算并无符号右移(>>>)三位
                }
                public static void toHex(int num){
                        trans(num,15,4);//此处注意与二进制数1111做%运算并无符号右移(>>>)四位

                }
         
                  public static void trans(int num,int base,int offset){
                 char[] chs={'0','1','2','3','4','5','6','7', '8','9','A','B', 'C', 'D','E','F'};
                 char[] arr=new char[32];
                 int pos=arr.length;
                 while(num!=0){
                         int temp=num & base;
                         arr[--pos]=chs[temp];
                         num=num>>>offset;        
                 }         
                 System.out.println("pos="+pos);//此处可以可以略去,保留的目的是为了指针在什么位置
                 for(int x=pos;x<arr.length;x++){
                         System.out.print(arr[x]);
                 }        
                 System.out.println();
        }
}
结果:输出结果
1
pos=31
7
pos=24
3A697589
请问还有什么地方不足需要改进?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 5分以下,鼓励一下~

查看全部评分

8 个回复

倒序浏览

回帖奖励 +1

楼主还想改进甚么?如果是寻找更加优秀的算法,那么没有了。如果想使代码更清晰,for循环不加括号,再把注释的那一句去掉。
回复 使用道具 举报

回帖奖励 +1

总结的不错,但是有一点,就是你最好把相应的注释加上,在有必要的地方加上注释,自己以后看着会方便些,否则你过了一段时间再看,估计你得重新仔细想想什么原理,为什么要定义数组,为什么要定义指针,这些会让你很痛苦的。在适当的地方加上注释很重要。

评分

参与人数 1黑马币 +6 收起 理由
陈丽莉 + 6

查看全部评分

回复 使用道具 举报

回帖奖励 +1

本帖最后由 付玉光 于 2013-2-27 12:56 编辑


class text1 {
    public static void main (String[] args){
      trans(10,2);
      trans(10,8);
      trans(10,16);
    }

   public static void trans(int num,int base){

    //定义字符数组,根据对应的角标进行查找  (查表法)
     char[] chs={'0','1','2','3','4','5','6','7', '8','9','A','B', 'C', 'D','E','F'};

     //因传入的是一个int型,它转成二进制数后有32个二进制位,
     //也就是在各进制中,位数最多的进制位,之所以这样定义是
     //为了不仅能容8进制,16进制,更能容纳2进制。
     char[] arr=new char[32];

     //定义一个指针,用于记录字符数组中角标变化的位置。
     int pos=arr.length;

     while(num!=0){
      //先让该数对,相应的数,取余。
      int temp = num%base;
      //把该数作为字符数组的角标,去查数组中相应的字符,
      //并从自定义的空数组末尾进行由后前向存储。
      arr[--pos] = chs[temp];
      //该数除以相应的进制数。
      num = num / base;
     }         

     //此处可以略去,保留的目的是为了查看指针所在位置
     //System.out.println("pos="+pos);

     //根据指针的位置,遍历数组,并打印在控制台上。
     for(int x=pos;x<arr.length;x++){
      System.out.print(arr[x]);
     }        
     System.out.println();
   }
}
//其它就没有了,希望对你有帮助。    这样是不是更通用,更简单呢?{:soso_e100:}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
  1. /*
  2.          * num:要转换的十进制数值
  3.          * x:进制
  4.          */
  5.         public static void foo(int num,int x){
  6.                 int tmp=0;
  7.                 if (num > 0) {
  8.                             foo(num / x,x);
  9.                             if((tmp=num % x)>=10){
  10.                                     System.out.println((char)(tmp-10+'a'));
  11.                             }else{
  12.                                     System.out.print(tmp);
  13.                             }
  14.                            
  15.                     }
  16.         }
复制代码
你看看这个行不行

评分

参与人数 1黑马币 +6 收起 理由
陈丽莉 + 6 技术分够了,给你加点金币吧~

查看全部评分

回复 使用道具 举报
我想知道程序有没有bug  {:soso_e132:}
回复 使用道具 举报
好像上面的程序不能处理 输入 0  ,如何改进呢?
回复 使用道具 举报
文密 中级黑马 2013-2-28 20:38:40
8#
public class text {
          public static void main (String[] args){
                  System.out.println(toBin(1));
                  System.out.println(toOct(7));
                 System.out.println( toHex(979989897));
          }
            public static String toBin(int num){
                    return    trans(num,1,1);//此处注意与二进制数1做%运算并无符号右移(>>>)一位
                }
                public static String toOct(int num){
                     return   trans(num,7,3);//此处注意与二进制数111做%运算并无符号右移(>>>)三位
                }
                public static String toHex(int num){
                        return trans(num,15,4);//此处注意与二进制数1111做%运算并无符号右移(>>>)四位
                }
         
                 
     public static String trans(int num,int base,int offset){
      if(num==0)        //在此处进行一个判断 如果是0 就直接返0。并且下面的代码不会在运行
      {
      return "0";
      }
      char[] chs={'0','1','2','3','4','5','6',
      '7', '8','9','A','B', 'C', 'D','E','F'};
                 char[] arr=new char[32];
                 int pos=arr.length;
                 while(num!=0){
                         int temp=num & base;
                         arr[--pos]=chs[temp];
                         num=num>>>offset;        
                 }         
               
             // System.out.println("pos="+pos);//此处可以可以略去,保留的目的是为了指针在什么位置
                   String str="";    //定义一个字符串, 把一个数组变成字符串,就是通过相连接。
                 for(int x=pos;x<arr.length;x++){
                      //   System.out.print(arr[x]);
                       str+=arr[x];      
                 }  
                   return str;                                 // System.out.println();
        }
}

红色为更改的代码
玩进制一般都会返回一结果给你。而不是打印出来,
应该把这个结果以字符串的方法返回给你。因为这个结果里面会包含很多内容。
回复 使用道具 举报
文密 发表于 2013-2-28 20:38
public class text {
          public static void main (String[] args){
                  System.out. ...

嗯,明白
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马