- package cn.yangge.day1.demo;
- import java.util.InputMismatchException;
- import java.util.Scanner;
- public class Demo_20 {
- public static void main(String[] args) {
- int x, y, z;
- boolean flag = true;
- while (flag) {
- System.out.println("请确定你输入的数据是什么进制的(2:二进制,8:八进制,10:十进制,16:十六进制):");
- x = input();
- x = sure(x);
- System.out.println("请输入你需要转换的数据:");
- y = input(x);
- System.out.println("请确定你需要转换的进制(2:二进制,8:八进制,10:十进制,16:十六进制):");
- z = input();
- z = sure(z);
- change(x, y, z);
- System.out.println("您是否想进行下一次数据转换?是请输入:yes,否则输入:no");
- flag = isAgain();
- System.out.println();
- }
- }
- private static boolean isAgain() {
- // TODO 自动生成的方法存根
- Scanner s = new Scanner(System.in);
- String str = s.next();
- if (str.equals("yes"))
- return true;
- else if (str.equals("no"))
- return false;
- else {
- System.out.println("您输入的格式不正确,请输入yes或者是no。");
- isAgain();
- return true;
- }
- }
- private static void change(int x, int y, int z) {
- // TODO 自动生成的方法存根
- switch (z) {
- case 2:
- toBin(x, y);
- break;
- case 8:
- toOct(x, y);
- break;
- case 10:
- System.out.println("您输入的" + x + "进制数的十进制形式是:" + y);
- break;
- case 16:
- toHex(x, y);
- break;
- }
- }
- private static void toHex(int x, int y) {// 转十六进制
- // TODO 自动生成的方法存根
- System.out.print("您输入的" + x + "进制数的十六进制形式是:");
- trans(y, 15, 4);
- }
- private static void toOct(int x, int y) {// 转八进制
- // TODO 自动生成的方法存根
- System.out.print("您输入的" + x + "进制数的八进制形式是:");
- trans(y, 7, 3);
- }
- private static void toBin(int x, int y) {// 转二进制
- // TODO 自动生成的方法存根
- System.out.print("您输入的" + x + "进制数的二进制形式是:");
- trans(y, 1, 1);
- }
- private static void trans(int y, int base, int offset) {
- // TODO 自动生成的方法存根
- if (y == 0) {
- System.out.println("0");
- }
- char[] chs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
- 'B', 'C', 'D', 'E', 'F' };// 定义一个对应关系表
- char[] arr = new char[32];
- int pos = arr.length;
- while (y != 0) {
- int temp = y & base;
- arr[--pos] = chs[temp];
- y = y >>> offset;
- }
- for (int i = pos; i < arr.length; i++) {
- System.out.print(arr[i]);
- }
- System.out.println();
- }
- private static int input(int x) {
- // TODO 自动生成的方法存根
- Scanner sc = new Scanner(System.in);
- String s = sc.next();
- int temp;
- try {
- temp = Integer.parseInt(s, x);
- } catch (NumberFormatException e) {
- System.out.println("请输入正确的进制类型:");
- temp = input(x);
- }
- return temp;
- }
- private static int sure(int x) {// 判断输入的数字是否为进制类型
- // TODO 自动生成的方法存根
- switch (x) {
- case 2:
- return x;
- case 8:
- return x;
- case 10:
- return x;
- case 16:
- return x;
- default: {
- System.out.println("请输入正确的进制类型,你只能输入2,8,10或者16。请重新输入::");
- x = input();
- x = sure(x);
- return x;
- }
- }
- }
- private static int input() {// 接收用户输入的数据,如果不为整数,则抛出异常
- // TODO 自动生成的方法存根
- Scanner sc = new Scanner(System.in);
- String s = sc.next();
- int temp;
- try {
- temp = Integer.parseInt(s);
- } catch (NumberFormatException e) {
- System.out.println("输入数据类型错误,必须为整数");
- return temp = input();
- }
- return temp;
- }
- }
复制代码
不错。 |