服务器之家

服务器之家 > 正文

Java实现复杂的进制转换器功能示例

时间:2020-07-21 11:46     来源/作者:aitaoke

本文实例讲述了Java实现复杂的进制转换器功能。分享给大家供大家参考,具体如下:

这是用java写的进制转换器,包括10、2、8、16进制之间共12种的相互转换。输入一个要转换的数之后,按提示选择所采用的转换方式,输出转换的结果。

注:新上传的文件是在此前代码(下面的3. 原java代码)的基础上做了改进,能更好地实现封装。

1. SystemConvert.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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. 运行效果截图:

Java实现复杂的进制转换器功能示例

Java实现复杂的进制转换器功能示例

3. 原java代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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. 运行截图:

Java实现复杂的进制转换器功能示例

 

希望本文所述对大家java程序设计有所帮助。

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
返回顶部