Как конвертировать любое число в любую базу? - PullRequest
0 голосов
/ 07 марта 2020
 System.out.println("BASE CONVERTER");

 Scanner indigit = new Scanner( System.in );
 System.out.print("DIGIT REPRESENTATION: ");
 String digit =indigit.next();

 Scanner inbase1 = new Scanner( System.in );
 System.out.print("SOURCE BASE: ");
 int base1 =inbase1.nextInt();
 int decimal = Integer.parseInt(digit,base1);
 System.out.println("DECIMAL: " + decimal);

 Scanner inbase2 = new Scanner( System.in );
 System.out.print("TARGET BASE: ");
 int base2 =inbase2.nextInt();

 System.out.println("NEW NUMBER: " + Integer.toString(decimal, base2));

Код работает, однако я хотел бы добавить опцию, которая определяет, является ли ввод действительным или нет. Например, «А» будет недопустимым в базе 2. Вот моя попытка, но она не работает.

 int i;
 int len=digit.length();
 for (i = len - 1; i >= 0; i--)
{
    String value = Character.toString(a.charAt(i));
    if ((Integer.valueOf(((a.charAt(i))+""),16)) >= 16) System.out.print("Invalid Number");   

Ответы [ 2 ]

2 голосов
/ 07 марта 2020

Вы уже прошли большую часть пути с вашим существующим кодом. Если вы хотите узнать только, верен ли ввод, вы можете перехватить соответствующее исключение:

try {
    int i = Integer.parseInt("A", 2);
} catch (NumberFormatException nfe) {
    // or however you want to handle the exception:
    System.out.println("Number format exception: " + nfe.getMessage());
}

Посмотрите определение здесь в Javado c.

Броски: NumberFormatException - если строка не содержит синтаксический анализ int

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

Я думаю, что самый простой и гибкий способ - использовать BigInteger. Он допускает произвольные размеры целых чисел, передаваемые в виде строки.

   public static void main(String[] args) {
        System.out.println(toBase("FF", 16, 10));
        System.out.println(toBase("FF", 16, 2));
        System.out.println(toBase("123", 2, 16));
        System.out.println(toBase("111111111111111111111111111111111111111111111111111",2, 16));
    }

Этот метод выполняет следующие действия:

  • принимает исходную и целевую базы.
  • возвращает требуемое преобразование.
  • выдает исключение, если база не подходит для указанного числа.
  • , в последнем случае возвращается ноль.
    public static String toBase(String num, int srcBase, int dstBase) {
        try {
        BigInteger b = new BigInteger(num,srcBase);
        return b.toString(dstBase);
        } catch (Exception e) {
            System.out.println("Invalid argument : " + e.getLocalizedMessage());
        }
        return null;
    }       

Вывод приведенных выше примеров:

255
11111111
7ffffffffffff
Invalid argument : For input string: "123" under radix 2
null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...