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