进制转换器

项目分析

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;
    }
}



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页