public class Converter { static int from; //转换前的进制 static int to; //转换后的进制 public static void main(String[] args) { while (true) { showMenu(); //显示菜单 调用函数 //接受字母 判断 boolean isExist = inputIsExiet(); //检验输入的是否合法 if (isExist){ //isExist为真即跳出循环 break; } } while (true) { String data = inputData(from); String result = convert(from,to,data); System.out.printf("%s(%d)=>%s(%d)\n",data,from,result,to); } } /** * 功能:进制转换 * @param from 源进制 * @param to 目标进制 * @param data 待转换的数 * @return 转换之后的结果 */ private static String convert(int from, int to, String data) { if (10==from){ return decima12x(to,data); } if (10==to){ return x2decimal(from,data); } return decima12x(to,x2decimal(from,data)); } /** * 功能:将十进制转换为其它进制 * @param radix 进制 * @param data 待转换的进制 * @return 转换之后的结果 */ private static String decima12x(int radix, String data) { String result=""; int d = Integer.parseInt(data); while (d !=0){ int reminder = d%radix; d /= radix; result = reminder+result; } return result; } /** * 功能:将其它进制转换为十进制 * @param radix 进制 * @param data 待转换的数据 * @return 转换之后的结果 */ private static String x2decimal(int radix, String data) { int num = 0; int len = data.length(); for (int i = 0;i<len;i++){ char ch = data.charAt(i); if (ch >= 'a'){ num +=(ch-'a'+10)*(int)Math.pow(radix,len-i-1); }else { num +=(ch-'0')*(int)Math.pow(radix,len-i-1); } } return String.format("%d",num); } /** * 功能:接收转换数据的输入,需验证 * @param radix 进制(验证的依据) * @return 输入的数据 */ private static String inputData(int radix) { Scanner scan = new Scanner(System.in); String data = null; boolean success = false; while (!success){ System.out.printf("请输入一个%d进制数:",radix); data = scan.next(); success = validate(from,data); } return data; } /** * 功能:验证数据的合法性 * @param radix 进制 (验证的依据) * @param data 待验证的数据 * @return 是否合法 */ private static boolean validate(int radix, String data) { data = data.toLowerCase(); for (int i = 0; i<data.length(); i++){ char ch = data.charAt(i); if (!isDigit(radix,ch)){ return false; } } return true; } /** * 判断是否为合法字符 * @param radix 进制(判断的依据) * @param ch 待判断的字符 * @return 是否合法 */ private static boolean isDigit(int radix, char ch) { if (16==from){ return (ch >='0' && ch<='9') || (ch >='a' &&ch <= 'f'); } int n = ch -'0'; // '' return n>=0 && n<from; } /** * 接收字符串即字母,判定相关操作 * toUpperCase() 方法用于将小写字符转换为大写。 * @return 是否是结束命令 */ private static boolean inputIsExiet() { Scanner sc = new Scanner(System.in); String n = sc.next(); n=n.toUpperCase(); switch (n){ case "A": from = 10;to = 2; break; case "B": from = 2;to = 10; break; case "C": from = 10;to = 8; break; case "D": from = 8;to = 10; break; case "E": from = 10;to = 16; break; case "F": from = 16;to = 10; break; case "G": from = 2;to = 8; break; case "H": from = 8;to = 2; break; case "J": from = 2;to = 16; break; case "K": from = 16;to = 2; break; default: System.out.println("指令错误!"); return false; } return true; } /** * 作用:显示操作菜单 */ private static void showMenu() { System.out.println("*-------------------------------------------*"); System.out.println("* A:十进制 => 二进制 B:二进制 => 十进制*"); System.out.println("* C:十进制 => 八进制 D:八进制 => 十进制*"); System.out.println("* E:十进制 => 十六进制 F:十六进制 => 十进制*"); System.out.println("* G:二进制 => 八进制 H:八进制 => 二进制*"); System.out.println("* I:二进制 => 十六进制 J:十六进制 => 二进制*"); System.out.println("* K:退出 *"); System.out.println("*-------------------------------------------*"); } }
简单进制转换器
猜你喜欢
转载自blog.csdn.net/zyz0225/article/details/80187145
今日推荐
周排行