java小項目—進制轉換(進制轉換器)源碼!

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("*-------------------------------------------*");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章