Шестнадцатеричный в двоичный и десятичный преобразователь - PullRequest
1 голос
/ 16 марта 2020

все. Здесь у меня есть гекса в двоичный и десятичный преобразователь. Проблема в том, что когда я ввожу неверный ввод, такой как буква G или X, он дает мне отрицательный вывод. Как я могу предотвратить это и вместо этого распечатать, что это неверный номер

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);

                System.out.print("Enter Hexadecimal Number : ");
                hexdecnum = scan.nextLine();
                final int MAX_LENGTH = 2;

                      if(String.valueOf(hexdecnum).length() <= MAX_LENGTH) {
                          /* 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");
                        System.out.print("Enter a number: ");
                      }
                    } 

Ответы [ 2 ]

1 голос
/ 16 марта 2020

На основании вашего комментария я обновил программу, чтобы разрешить принимать числа только в шестнадцатеричном диапазоне от 90 до FF.

Сделайте это следующим образом:

import java.util.Scanner;

public class 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);
    }
}

Пробный прогон:

Enter Hexadecimal number in the range of 90 to FF: abc
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: ab
Equivalent Dec Number is : 171
Equivalent Binary Number is : 10101011

Другой пробный прогон:

Enter Hexadecimal number in the range of 90 to FF: AG
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: AB
Equivalent Dec Number is : 171
Equivalent Binary Number is : 10101011

Другой пробный прогон:

Enter Hexadecimal number in the range of 90 to FF: 21
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: 90
Equivalent Dec Number is : 144
Equivalent Binary Number is : 10010000

Другой пример:

Enter Hexadecimal number in the range of 90 to FF: 40
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: FF
Equivalent Dec Number is : 255
Equivalent Binary Number is : 11111111

Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

1 голос
/ 16 марта 2020

Попробуйте этот код. Вам просто нужно проверить, возвращает ли charAt положительное значение, если оно возвращает -1, что означает, что искомого символа нет в этой строке.


    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);
            if (d!=-1)
                val = 16*val + d;
            else
                return 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);

        System.out.print("Enter Hexadecimal Number : ");
        hexdecnum = scan.nextLine();
        final int MAX_LENGTH = 2;

        if(String.valueOf(hexdecnum).length() <= MAX_LENGTH) {
            /* first convert the hexadecimal to decimal */

            decnum = hex2decimal(hexdecnum);
            if (decnum==-1)
                System.out.println("Incorrect Hex Value");
            else {
                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");
            System.out.print("Enter a number: ");
        }
    }


...