JAVA进制转换,程序举例

JAVA进制转换,程序举例

 package JAVA_Project_01_02;//创建一个包

import java.util.Scanner;

public class TextNumberConversion {//操作数制转换的类
    public  static int NumberToTen(int beforeConversion,String number){//其他进制转换成十禁制
        double result=0;//声明转换后的数值
        String subString;//根据字符串的长度循环获得单个元素
        for (int i =0; i<number.length();i++){
            subString=number.substring(i,i++);//将字母转换成数字
            if (beforeConversion==16){
                subString=sixteenCharToNumber(subString);//返回转换的结果
            }
            result+=Integer.parseInt(subString)
                    *Math.pow(beforeConversion,number.length()-i-1);
        }
        return (int)result;
    }
    public static  String TenToNumber(int afterConversion,String number){//十进制转成其他进制
        int current=Integer.parseInt(number);//将字符转成整数
        String opResult="";//判断转换后的数制是否是十六进制
        if (afterConversion==16){//判断传入的数是否大于16,大于则逢16进1
            while (current>=afterConversion){
                opResult+=sixteenNumberToChar(current%afterConversion);//将数字转换成字母
                current/=afterConversion;
            }
            if (current!=0) opResult+=sixteenNumberToChar(current);//最终余数
        } else{//判断传入的值是否大于转换后的数制
            while (current>=afterConversion){
                opResult+=current%afterConversion;
                current/=afterConversion;
            }
            if (current!=0) opResult+=current;//最终余数
        }
        String riResult="";//倒序二进制字符串//根据二进制的转换方式进行循环输出
        for (int i=opResult.length()-1;i>=0;i--){
            riResult=riResult+opResult.substring(i,i+1);
        }
        return riResult;
    }
    public static String sixteenCharToNumber(String s){//十六进制字母对应数字
        String num="";
        if (s.equals("A")||s.equals("a"))
            num="10";
        else if (s.equals("B")||s.equals("b"))
            num="11";
        else if (s.equals("C")||s.equals("c"))
            num="12";
        else if (s.equals("D")||s.equals("d"))
            num="13";
        else if (s.equals("E")||s.equals("e"))
            num="14";
        else if (s.equals("F")||s.equals("f"))
            num="15";
        else
            num=s;
        return  num;
    }
    public static String sixteenNumberToChar(int num){//十六进制数字对应字母
        String c="";
        if (num==10) c="A";
        else if (num==11) c="B";
        else if (num==12) c="C";
        else if (num==13) c="D";
        else if (num==14) c="E";
        else if (num==15) c="F";
        else c=String.valueOf(num);
        return c;
    }

    public static void main(String[] args) {//java程序的主入口处
        String number;//要转换的数
        int beforeConversion,afterConversion;//转换前的数制,转换后的数制
        String result="";//经过数制转换后的结果
        String stop="";
        Scanner read=new Scanner(System.in);//得到用户输入的值
        do {
            System.out.println("请输入三个参数(整数):带转换的数据  转换前的数制  转换后的数制");
           number=read.next();
           beforeConversion=read.nextInt();
           afterConversion=read.nextInt();
           stop="Q";
        }while (stop!="Q");//跳出循环
        try{
            if (beforeConversion!=10){//判断转换前的数制是否是十进制
                String temp=String.valueOf(NumberToTen(beforeConversion,number));//转换成十进制的数
                result=String.valueOf(TenToNumber(afterConversion,temp));//十进制转换成其他进制
            }else {
                result=String.valueOf(TenToNumber(afterConversion,number));//十进制转换成其他进制
            }
            System.out.println(beforeConversion+"进制的数:"+number+",转换成"+afterConversion+"进制的数为:"+result);
        }catch (Exception e){
            System.out.println("转换失败,请输入合法数据!");//所有程序(方法,类等)停止,系统停止运行
            System.exit(-1);
        }
    }
    /*(1)NumberToTen()方法根据传入的数制转换成十进制,用循环遍历字符串获得字符串中的单个字符,
    然后对每个字符进行判断。传入的如果是十六进制的数,则调用sixteenCharToNumber()方法将字符转换成数字。
    并运用Math.pow()返回底数的指定次幂的功能对数据进行计算。Math.pow(x,y)相当于计算xy.
    (2)TenToNumber()方法首先将要转换的字符转为整形,并根据转换后的数制获得相应的结果。十进制转换为二进制时,
    需要将十进制的数依次除2取余,获得的余数需要进行倒序整理。
    (3)由于十六进制的数据中含有字母和数字,在进行数制转换时需要进行相应的字母数字转换。
    (4)在程序主方法main()中,笔者运用运行程序获取用户输入的方式获取数据,具有很好的灵活性和可操作性。
    * */
}

发布了70 篇原创文章 · 获赞 10 · 访问量 3212

猜你喜欢

转载自blog.csdn.net/JN_Cat/article/details/102507993
今日推荐