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("*-------------------------------------------*"); } }
java小項目—進制轉換(進制轉換器)源碼!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.