十六进制到十进制和二进制用户定义的方法[关闭]

问题描述 投票:0回答:1

我有将十六进制值转换为十进制和二进制的代码。我正在尝试为每次转换创建两个不同的用户定义方法。另外,main方法应该在不同的类中。

    public static int hex2decimal(String s) 
{
        String digits = "0123456789ABCDEF";
        s = s.toUpperCase();
        int val = 0;
        for (int i = 0; i < s.length(); i++) 
{
            char c = s.charAt(i);
            int d = digits.indexOf(c);
            val = 16 * val + d;
        }
        return val;
    }

    public static void main(String args[]) {
        String hexdecnum;
        int decnum, i = 1, j;

        int binnum[] = new int[100];
        Scanner scan = new Scanner(System.in);
        boolean valid;
        do {
            valid = true;
            System.out.print("Enter Hexadecimal number in the range of 90 to FF: ");
            hexdecnum = scan.nextLine();
            final int MAX_LENGTH = 2;

            if (hexdecnum.matches("[A-Fa-f0-9]{2}") && hex2decimal(hexdecnum) >= 144) {
                /* first convert the hexadecimal to decimal */

                decnum = hex2decimal(hexdecnum);
                System.out.print("Equivalent Dec Number is : " + decnum);
                System.out.println();

                /* now convert the decimal to binary */

                while (decnum != 0) {
                    binnum[i++] = decnum % 2;
                    decnum = decnum / 2;
                }

                System.out.print("Equivalent Binary Number is : ");
                for (j = i - 1; j > 0; j--) {
                    System.out.print(binnum[j]);
                }
            } else {
                System.out.println("ERROR: Invalid Input");
                valid = false;
            }
        } while (!valid);
    }
}
java eclipse hex
1个回答
0
投票

执行以下操作:

import java.util.Scanner;

class Conversion {
    public static int hex2decimal(String s) {
        String digits = "0123456789ABCDEF";
        s = s.toUpperCase();
        int val = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            int d = digits.indexOf(c);
            val = 16 * val + d;
        }
        return val;
    }

    public static int[] dec2binary(int decnum) {            
        int binnum[] = new int[8];
        int i = 0;
        while (decnum != 0) {
            binnum[i++] = decnum % 2;
            decnum = decnum / 2;
        }
        return binnum;
    }

    void showConversion(Scanner scan) {
        String hexdecnum;
        int decnum, j;

        boolean valid;
        do {
            valid = true;
            System.out.print("Enter Hexadecimal number in the range of 90 to FF: ");
            hexdecnum = scan.nextLine();

            if (hexdecnum.matches("[A-Fa-f0-9]{2}") && hex2decimal(hexdecnum) >= 144) {
                /* first convert the hexadecimal to decimal */
                decnum = hex2decimal(hexdecnum);
                System.out.println("Equivalent Dec Number is : " + decnum);

                /* now convert the decimal to binary */
                int binnum[] = dec2binary(decnum);
                System.out.print("Equivalent Binary Number is : ");
                for (j = binnum.length - 1; j > 0; j--) {
                    System.out.print(binnum[j]);
                }
                System.out.println();
            } else {
                System.out.println("ERROR: Invalid Input");
                valid = false;
            }
        } while (!valid);
    }
}

public class Main {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        Conversion c = new Conversion();
        c.showConversion(scan);
    }
}

示例运行:

Enter Hexadecimal number in the range of 90 to FF: FF
Equivalent Dec Number is : 255
Equivalent Binary Number is : 1111111

另一个示例运行:

Enter Hexadecimal number in the range of 90 to FF: 90
Equivalent Dec Number is : 144
Equivalent Binary Number is : 1001000

如有任何疑问/问题,请随时发表评论。

[更新]

根据OP的评论发布在dec2binary的另一个版本下面:

import java.util.Scanner;

class Conversion {
    public static int hex2decimal(String s) {
        String digits = "0123456789ABCDEF";
        s = s.toUpperCase();
        int val = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            int d = digits.indexOf(c);
            val = 16 * val + d;
        }
        return val;
    }

    public static String dec2binary(int decnum) {
        StringBuilder binary = new StringBuilder();
        while (decnum != 0) {
            binary.append(decnum % 2);
            decnum = decnum / 2;
        }
        return binary.toString();
    }

    void showConversion(Scanner scan) {
        String hexdecnum;
        int decnum, j;

        boolean valid;
        do {
            valid = true;
            System.out.print("Enter Hexadecimal number in the range of 90 to FF: ");
            hexdecnum = scan.nextLine();

            if (hexdecnum.matches("[A-Fa-f0-9]{2}") && hex2decimal(hexdecnum) >= 144) {
                /* first convert the hexadecimal to decimal */
                decnum = hex2decimal(hexdecnum);
                System.out.println("Equivalent Dec Number is : " + decnum);

                /* now convert the decimal to binary */
                String binary = dec2binary(decnum);
                System.out.print("Equivalent Binary Number is : " + binary);

            } else {
                System.out.println("ERROR: Invalid Input");
                valid = false;
            }
        } while (!valid);
    }
}

public class Main {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        Conversion c = new Conversion();
        c.showConversion(scan);
    }
}

注意:如果要使用String而不是StringBuilder,则可以使用。但是,我建议您通过StringBuilder vs String concatenation in toString() in Java正确理解它。

© www.soinside.com 2019 - 2024. All rights reserved.