本帖最后由 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;
- }
- }
- }
复制代码 |