Как я могу предотвратить печать кода отрицательным выводом? - PullRequest
0 голосов
/ 06 марта 2020

Это код, над которым я работаю. Проблема в том, что когда я ввожу не шестнадцатеричное значение, такое как «rr» или «z», оно печатает отрицательное значение. Как я могу остановить это от этого? Кроме того, как я могу решить этот вопрос? Когда программа запускается, она просит пользователя ввести шестнадцатеричное число длин 2 (например, 1F). Наименьшее число, которое пользователь должен ввести, равно 90 (десятичный эквивалент 144), а самое большое - FF (десятичный эквивалент 255).

import java.util.Scanner;

public class HexaConverter {


        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;
        }
        //Start of conversion method
         public static void main(String args[])
            {
                String hexadec_num;
                int dec_num, i=1, j;

                int bin_num[] = new int[100];
                Scanner scan = new Scanner(System.in);

                System.out.print("Please enter a Hexadecimal Number: ");
                hexadec_num = scan.nextLine();
                final int MAX_LENGTH = 2;

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

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

                          /* now convert the decimal to binary */

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

                          System.out.print("Equivalent Binary Number is : ");
                          System.out.print("\n");

                          for(j=i-1; j>0; j--)
                          {
                              System.out.print(bin_num[j]);
                          }
                      } 
                      else 
                      {
                        System.out.println("ERROR: Input number was too long");


                        main(args); // calling to return to the main method
                        }
                      }
                    } 

1 Ответ

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

int d = digits.indexOf(c); вернет -1, если символ не существует в строке цифр, если вы добавите проверку для этого:

int d = digits.indexOf(c);
if (d == -1) return 0;  // CHECK HERE
val = 16*val + d;

Тогда вы можете обработать ошибку, как вам нравится, в этом примере я только что возвратил 0

Что касается второй части вопроса, вы можете просто проверить, что значение возвращаемого результата находится в пределах 144 и 255

if (144 <= dec_num && dec_num <= 255) return "SUCCESS";
return "FAIL";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...