黑马程序员技术交流社区

标题: 一个实现十进制转其他进制的小程序 [打印本页]

作者: samge    时间: 2015-11-13 00:12
标题: 一个实现十进制转其他进制的小程序
本帖最后由 samge 于 2015-11-13 00:14 编辑

这小程序的功能是实现从键盘输入一个整数以及你想要转换的进制,然后输出你要的结果;功能虽然是实现了,但是还没有很好的优化,当然实现这功能的方法有很多种,希望黑马的兄弟们有更好的方法实现功能的话回复交流一下,我还在基础班,很多东西考虑的还不够……
  1. /**
  2. * 要求:定义一个方法,实现从键盘输入一个十进制以及要进行转换的进制,从而进行转换
  3. * 思路:
  4. * 1、先定义一个转换方法,接收要转换的数值data以及要转换的进制n
  5. * 2、定义一个char数组,存放0~9,a~f的值,方便下面取出来的值调取相应的字符(这方便十六进制转换);
  6. * 3、定义一个长度为32的数组(因为int最长为32位)用于接收数据;
  7. * 3、让data&n,从而将每次需要转换的几位码取出来,并且将取出来的的数值作为char数组的下标取出对应的值存进一个数组
  8. * 4、输出数组
  9. */
  10. import java.util.*;
  11. public class Change {

  12.         public static void main(String[] args) {
  13.                 // TODO Auto-generated method stub
  14.                 //getChange(60,16);
  15.                 Scanner putIn = new Scanner(System.in);
  16.                 System.out.print("请输入一个整数:");
  17.                 int data = putIn.nextInt();
  18.                 System.out.print("请输入你要转换的进制:");
  19.                 int n = putIn.nextInt();
  20.                 getChange(data,n);
  21.         }
  22.         public static void getChange(int data,int n){
  23.                         //十进制转为二进制、八进制、十六进制的方法
  24.                         char[] c = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};        //定义一个char数组
  25.                         char[] str = new char[32];        //定义一个接收数组,int型最长为32位
  26.                         //定义一个pos控制输出数组的下标
  27.                         int pos = 0;
  28.                         switch(n){
  29.                                 //输出二进制
  30.                                 case 2 :{
  31.                                         while(data != 0){
  32.                                                 //进行data最尾端一组数据的进制转换
  33.                                                 str[pos++] =c[(data & n-1)];
  34.                                                 data = data >>> 1;
  35.                                         }
  36.                                         //将转换后的值进行输出
  37.                                         System.out.print("转换为 "+n+" 进制后为:");
  38.                                         for(int i = pos-1;i >= 0;i--)
  39.                                                 System.out.print(str[i]);
  40.                                 System.out.println();        //输出后换行
  41.                                 }
  42.                                 break;

  43.                                 //输出八进制
  44.                                 case 8 :{
  45.                                         while(data != 0){
  46.                                                 //进行data最尾端一组数据的转换
  47.                                                 str[pos++] =c[(data & n-1)];
  48.                                                 data = data >>> 3;
  49.                                         }
  50.                                         //将转换后的值进行输出
  51.                                         System.out.print("转换为 "+n+" 进制后为:");
  52.                                         for(int i = pos-1;i >= 0;i--)
  53.                                                 System.out.print(str[i]);
  54.                                 System.out.println();        //输出后换行
  55.                                 }
  56.                                 break;
  57.                                 
  58.                                 //输出十六进制
  59.                                 case 16 :{
  60.                                         while(data != 0){
  61.                                                 //进行data最尾端一组数据的转换
  62.                                                 str[pos++] =c[(data & n-1)];
  63.                                                 data = data >>> 4;
  64.                                         }
  65.                                         //将转换后的值进行输出
  66.                                         System.out.print("转换为 "+n+" 进制后为:");
  67.                                         for(int i = pos-1;i >= 0;i--)
  68.                                                 System.out.print(str[i]);
  69.                                 System.out.println();        //输出后换行
  70.                                 }
  71.                                 break;

  72.                                 //超出范围处理
  73.                                 default :{
  74.                                         System.out.println("对不起,暂时只支持十进制转二进制、八进制和十六进制,您要转换的进制 "
  75.                                                                                 +n+" 超出计算范围,请重新输入");
  76.                                 }
  77.                                 break;
  78.                         }        
  79.                 }

  80. }
复制代码

作者: samge    时间: 2015-11-13 00:17
方法里面还有很多重复代码,主要是转换不同进制时需要逻辑右移不同的位数,那里还不会整合为一个函数块中……比如转为2进制需要右移1位,转为8进制需要右移3位,转为16进制需要右移4位,如何将1、3、4抽象为一个变量呢?




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