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()中,筆者運用運行程序獲取用戶輸入的方式獲取數據,具有很好的靈活性和可操作性。
    * */
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章