项目分析
1.
①打印主菜单。
②输出主菜单选项(小写转化为大写)(输入的验证)
2. 大小写的转化。
①输入需要转化的数
(必须要小于基数 需验证为字符串型)
(参数 :基数)
(返回值:一个通过验证过的数)
3. 进制的转化
转化的方式分两种:
①一种是十进制转化为其他进制。
②另一种是其他进制转化为十进制
public class C_201_4_12项目分析 { static int from;//待转换的进制 static int to;//转换后的进制 //主函数 public static void main(String[] args) { while(true) {//函数一直在执行 showMenu(); boolean isExist = inputCommand();//输入你所打印的选项 if(isExist){ break;//选项合法跳出 不合法从新输入 } String data = inputData(from); String result = convert(from,to,data); System.out.printf("%s(%d)→%s(%d)\n",data,from,result,to); } } /** * 功能:显示操作菜单 */ 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("*--------------------------------------------*"); } /**输入选项 * 功能:接收转换命令的输入 * @return 是否是结束命令 */ private static boolean inputCommand(){ Scanner scan = new Scanner(System.in); String command = scan.next().toUpperCase();//把大小写统一转化为大写 switch(command) { 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 "I": from = 2; to = 16; break; case "J": from = 16; to = 2; break; case "K": return true; default: System.out.println("错误命令!");//如果输入不合法 return inputCommand(); } return false; } /** * 功能:接收待转换数据的输入,需验证 * @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 from 源进制 * @param to 目标进制 * @param data 待转换的数 * @return 转换之后的结果 */ private static String convert(int from, int to, String data) { if(10 == from){ return decimal2x(to,data); } if(10 == to) { return x2decimal(from, data); } return decimal2x(to,x2decimal(from,data)); } /** * 功能:将其它进制转换为十进制 * @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 进制 * @param data 待转换的数据 * @return 转换之后的结果 */ private static String decimal2x(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 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; } }