Двоично-десятичный калькулятор InputMismatchException - PullRequest
0 голосов
/ 04 мая 2019

Моя цель - создать простой двоичный в десятичный калькулятор.Я пытаюсь сделать это, сначала попросив пользователя ввести строку двоичного значения, которое он пытается вычислить, а затем использовать длину этой строки для запуска цикла for (как видно из кода ниже).Калькулятор работает нормально, но не работает, когда пользователь вводит двоичное число (из всех 1) длиной более 20 цифр.Я получаю сообщение об ошибке java.util.InputMismatchException и не знаю, как это исправить.

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Please enter a binary number to convert to decimal: ");
        long binaryNum = scan.nextLong();
        System.out.println(binaryConverter(binaryNum));
        scan.close();

}

    public static long binaryConverter(long binaryNum) {
        String binaryString = Long.toString(binaryNum);
        long decimalValue = 0;
        for(int i = 0; i < binaryString.length(); i++) {
            if((binaryNum%10) == 0) {
                binaryNum = binaryNum/10;
            } else if((binaryNum%10) == 1) {
                decimalValue += Math.pow(2, i);
                binaryNum = binaryNum/10;
            } else {
                System.out.println("This isn't a binary number. Please try again.");
                break;
            }
        }   
        return decimalValue;
}
}

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

То, как вы хотите сделать это, использует scanner.nextLong (2), где 2 - основание. Тогда вы будете читать реальное двоичное число.

long number = scanner.nextLong(2);
System.out.println(number);

производит

144115188075855871

для ввода

111111111111111111111111111111111111111111111111111111111
1 голос
/ 05 мая 2019

Если я вас правильно понял, вы всегда хотите преобразовать двоичный вход в десятичное значение. Очень простое решение будет выглядеть так:

public static void main(String[] args) {
  Scanner scan = new Scanner(System.in);
  System.out.println("Please enter a binary number to convert to decimal: ");
  final String input = scan.next();
  System.out.println(Integer.parseInt(input, 2));
  scan.close();
}

Если вам интересно, как это работает под капотом, взгляните на исходный код Java для Integer.parseInt .

...