本文實例講述了Java實現複雜的進制轉換器功能。分享給大家供大家參考,具體如下:
這是用java寫的進制轉換器,包括10、2、8、16進制之間共12種的相互轉換。輸入一個要轉換的數之後,按提示選擇所採用的轉換方式,輸出轉換的結果。
注:新上傳的文件是在此前代碼(下面的3. 原java代碼)的基礎上做了改進,能更好地實現封裝。
1. SystemConvert.java
package day8;import java.util.Scanner;public class SystemConvert { static Scanner scanner = new Scanner(System.in); static String s = ""; // 定義10進制轉2進制的方法。 public static String C10T2(int numb) { String result = ""; for (int i = numb; i > 0; i /= 2) result = i % 2 + result; return result; } // 定義10進制轉8進制的方法。 public static String C10T8(int numb) { String result = ""; for (int i = numb; i > 0; i /= 8) result = i % 8 + result; return result; } // 定義2進制轉10進制的方法。 public static int C2T10(int numb) { int k = 0, result = 0; // String result=null; for (int i = numb; i > 0; i /= 10) { result += (i % 10) * Math.pow(2, k); k++; } return result; } // 定義8進制轉10進制的方法。 public static int C8T10(int numb) { int k = 0, temp = 0; for (int i = numb; i > 0; i /= 10) { temp += (i % 10) * Math.pow(8, k); k++; } return temp; } public static void convert10(int numb, int to) { String s = ""; switch (to) { case 2: s = "" + C10T2(numb); break; case 8: s = "" + C10T8(numb); break; case 16: s = Integer.toHexString(numb).toUpperCase(); break; default: System.out.println("wrong input!"); } System.out.println(s); } public static void convert2(int numb, int to) { String s = ""; switch (to) { case 10: s = "" + C2T10(numb); break; case 8: s = "" + C10T8(C2T10(numb)); break; case 16: s = Integer.toHexString(C2T10(numb)).toUpperCase(); break; default: System.out.println("wrong input!"); } System.out.println(s); } public static void convert8(int numb, int to) { String s = ""; switch (to) { case 2: s = "" + C10T2(C8T10(numb)); break; case 10: s = "" + C8T10(numb); break; case 16: s = Integer.toHexString(C8T10(numb)).toUpperCase(); break; default: System.out.println("wrong input!"); } System.out.println(s); } public static void convert16(String numb, int to) { String s = ""; switch (to) { case 2: int temp2 = Integer.parseInt(numb, 16); s = C10T2(temp2); break; case 8: int temp3 = Integer.parseInt(numb, 16); s = C10T8(temp3); break; case 10: int temp = Integer.parseInt(numb, 16); s = "" + temp; break; default: System.out.println("wrong input!"); } System.out.println(s); } public static void convert(int numb, int from, int to) { switch (from) { case 10: convert10(numb, to); break; case 2: convert2(numb, to); break; case 8: convert8(numb, to); break; default: System.out.println("wrong input!"); } } public static void convert(String numb, int from, int to) { switch (from) { case 16: convert16(numb, to); break; default: System.out.println("wrong input!"); } } public static void main(String[] args) { System.out.println("要轉的是16進制數嗎?/n輸入1。代表是;/n輸入2.代表不是./n"); int input = scanner.nextInt(); switch (input) { case 1: System.out.println("請輸入一個16進制數:"); String numb = scanner.next(); System.out.println("轉成什麼進制的數?"); int to = scanner.nextInt(); convert(numb, 16, to); break; case 2: System.out.println("請輸入一個數:"); int numb2 = scanner.nextInt(); System.out.println("從什麼進制數轉起?"); int from = scanner.nextInt(); System.out.println("轉成什麼進制的數?"); int to2 = scanner.nextInt(); convert(numb2, from, to2); break; default: System.out.println("wrong input!"); } }}2. 運行效果截圖:
3. 原java代碼
import java.util.Scanner;public class SystemConvert { static Scanner scanner = new Scanner(System.in); static String s = ""; public static void convert() { System.out.println("please input a number:"); String numb = scanner.next(); System.out.println("choose a way:/n輸入1,表示10進制轉2進制;/n" + "輸入2,表示2進制轉10進制;/n" + "輸入3,表示10進制轉8進制;/n" + "輸入4,表示8進制轉10進制;/n" + "輸入5,表示10進制轉16進制;/n" + "輸入6,表示16進制轉10進制;/n" + "輸入7,表示2進制轉8進制;/n" + "輸入8,表示2進制轉16進制;/n" + "輸入9,表示8進制轉2進制;/n" + "輸入10,表示8進制轉16進制;/n" + "輸入11,表示16進制轉2進制;/n" + "輸入12,表示16進制轉8進制;/n"); int input = scanner.nextInt(); switch (input) { case 1: // 10>>>2 s = "" + C10T2(numb); break; case 2: // 2>>>10 s += C2T10(numb); break; case 3: // 10>>>8 s = "" + C10T8(numb); break; case 4: // 8>>>10 s = "" + C8T10(numb); break; case 5: // 10>>>16 s = Integer.toHexString(Integer.valueOf(numb)).toUpperCase(); break; case 6:// 16>>>10 int temp = Integer.parseInt(numb, 16); s = "" + temp; break; case 7: // 2>>>8 s = "" + C10T8(Integer.toString(C2T10(numb))); break; case 8: // 2>>>16 s = Integer.toHexString(Integer.valueOf(C2T10(numb))).toUpperCase(); break; case 9: // 8>>>2 s = "" + C10T2(Integer.toString(C8T10(numb))); break; case 10:// 8>>>16 s = Integer.toHexString(Integer.valueOf(C8T10(numb))).toUpperCase(); break; case 11:// 16>>>2 int temp2 = Integer.parseInt(numb, 16); s = Integer.toBinaryString(temp2); break; case 12:// 16>>>8 int temp3 = Integer.parseInt(numb, 16); s = C10T8(Integer.toString(temp3)); break; default: System.out.println("Wrong input!"); } System.out.println(s); } public static int C2T10(String numb) { int k = 0, result = 0; // String result=null; for (int i = Integer.valueOf(numb); i > 0; i /= 10) { result += (i % 10) * Math.pow(2, k); k++; } return result; } public static int C8T10(String numb) { int k = 0, temp = 0; for (int i = Integer.valueOf(numb); i > 0; i /= 10) { temp += (i % 10) * Math.pow(8, k); k++; } return temp; } public static String C10T8(String numb) { String result = ""; for (int i = Integer.valueOf(numb); i > 0; i /= 8) result = i % 8 + result; return result; } public static String C10T2(String numb) { String result = ""; for (int i = Integer.valueOf(numb); i > 0; i /= 2) result = i % 2 + result; return result; } public static void main(String[] args) { SystemConvert.convert(); }}4. 運行截圖:
PS:這裡再為大家推薦幾款本站的在線進制轉換與計算工具,相信對於大家能有所幫助:
在線任意進制轉換工具:
http://tools.VeVB.COm/transcoding/hexconvert
在線標準計算器:
http://tools.VeVB.COm/jisuanqi/jsq
在線科學計算器:
http://tools.VeVB.COm/jisuanqi/jsqkexue
希望本文所述對大家java程序設計有所幫助。