黑马程序员技术交流社区
标题:
一个实现十进制转其他进制的小程序
[打印本页]
作者:
samge
时间:
2015-11-13 00:12
标题:
一个实现十进制转其他进制的小程序
本帖最后由 samge 于 2015-11-13 00:14 编辑
这小程序的功能是实现从键盘输入一个整数以及你想要转换的进制,然后输出你要的结果;功能虽然是实现了,但是还没有很好的优化,当然实现这功能的方法有很多种,希望黑马的兄弟们有更好的方法实现功能的话回复交流一下,我还在基础班,很多东西考虑的还不够……
/**
* 要求:定义一个方法,实现从键盘输入一个十进制以及要进行转换的进制,从而进行转换
* 思路:
* 1、先定义一个转换方法,接收要转换的数值data以及要转换的进制n
* 2、定义一个char数组,存放0~9,a~f的值,方便下面取出来的值调取相应的字符(这方便十六进制转换);
* 3、定义一个长度为32的数组(因为int最长为32位)用于接收数据;
* 3、让data&n,从而将每次需要转换的几位码取出来,并且将取出来的的数值作为char数组的下标取出对应的值存进一个数组
* 4、输出数组
*/
import java.util.*;
public class Change {
public static void main(String[] args) {
// TODO Auto-generated method stub
//getChange(60,16);
Scanner putIn = new Scanner(System.in);
System.out.print("请输入一个整数:");
int data = putIn.nextInt();
System.out.print("请输入你要转换的进制:");
int n = putIn.nextInt();
getChange(data,n);
}
public static void getChange(int data,int n){
//十进制转为二进制、八进制、十六进制的方法
char[] c = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //定义一个char数组
char[] str = new char[32]; //定义一个接收数组,int型最长为32位
//定义一个pos控制输出数组的下标
int pos = 0;
switch(n){
//输出二进制
case 2 :{
while(data != 0){
//进行data最尾端一组数据的进制转换
str[pos++] =c[(data & n-1)];
data = data >>> 1;
}
//将转换后的值进行输出
System.out.print("转换为 "+n+" 进制后为:");
for(int i = pos-1;i >= 0;i--)
System.out.print(str[i]);
System.out.println(); //输出后换行
}
break;
//输出八进制
case 8 :{
while(data != 0){
//进行data最尾端一组数据的转换
str[pos++] =c[(data & n-1)];
data = data >>> 3;
}
//将转换后的值进行输出
System.out.print("转换为 "+n+" 进制后为:");
for(int i = pos-1;i >= 0;i--)
System.out.print(str[i]);
System.out.println(); //输出后换行
}
break;
//输出十六进制
case 16 :{
while(data != 0){
//进行data最尾端一组数据的转换
str[pos++] =c[(data & n-1)];
data = data >>> 4;
}
//将转换后的值进行输出
System.out.print("转换为 "+n+" 进制后为:");
for(int i = pos-1;i >= 0;i--)
System.out.print(str[i]);
System.out.println(); //输出后换行
}
break;
//超出范围处理
default :{
System.out.println("对不起,暂时只支持十进制转二进制、八进制和十六进制,您要转换的进制 "
+n+" 超出计算范围,请重新输入");
}
break;
}
}
}
复制代码
作者:
samge
时间:
2015-11-13 00:17
方法里面还有很多重复代码,主要是转换不同进制时需要逻辑右移不同的位数,那里还不会整合为一个函数块中……比如转为2进制需要右移1位,转为8进制需要右移3位,转为16进制需要右移4位,如何将1、3、4抽象为一个变量呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2