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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
        需求:可以随意的进行二进制,八进制以及十六进制的进制转换
        思路:通过定义一个具备有完整0-9,a-f的数组实现功能
        步骤:首先定义一个数组,该数组的类型应当为char类型
                  设定一个指针指向临时数组的末尾
                  该临时数组应当为32的数组
        理想状态:可以识别出用户想要输出的类型
*/
import java.util.Scanner;
class  SuperTrans{
        public static void main(String[] args) {
                //默认设定位移数为0
                int offsetnum = 0;
                //输入的是一个需要转化进制的数字
                Scanner sc = new Scanner(System.in);
                int num = sc.nextInt();
                System.out.println("输入的数字为:"+num);
                //输入的是一个基数
                Scanner bsc = new Scanner(System.in);
                int basenum = bsc.nextInt();
                System.out.println("输入的基数为:"+basenum);
                //对于基数进行判断,如果出现非二进制,八进制以及十六进制的数字则报错
                switch (basenum)
                {
                        case 1:
                                offsetnum = 1;
                                break;
                        case 7:
                                offsetnum = 3;
                                break;
                        case 15:
                                offsetnum = 4;
                                break;
                        default :
                                offsetnum = 0;
                                break;
                }
                if(offsetnum == 0) {
                        System.out.println("ERROR");
                }
                else {
                        trans(num ,basenum ,offsetnum);
                }
        }
        //base:基数 offset:位移位数
        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'};
                //创建一个有32位的char型数组
                char[] arr = new char[32];
                //定义一个指针用于指向数组的最末尾
                int pos = arr.length;
                System.out.println("目前指针的位置为:"+pos);
                while(num!=0) {
                        int temp = num & base;
                        //temp作为下标对chs进行查找
                        arr[--pos] = chs[temp];
                        System.out.println("目前指针的位置为:"+pos);
                        num =num >>>offset;
                }
                //打印整一个arr数组,顺序应当是正确的
                for (int x = pos;x<arr.length;x++) {
                        //for循环所控制的是X,而不是POS
                        System.out.print(arr[x]+",");
                }
        }
}
这一串代码我觉得还有很多不好的地方,希望有人能够帮忙指正一番

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马