/*
需求:可以随意的进行二进制,八进制以及十六进制的进制转换
思路:通过定义一个具备有完整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]+",");
}
}
}
这一串代码我觉得还有很多不好的地方,希望有人能够帮忙指正一番 |
|