【问题标题】:Binary to Decimal calculator InputMismatchException二进制到十进制计算器 InputMismatchException
【发布时间】:2025-12-10 02:20:07
【问题描述】:

我的目标是创建一个简单的二进制到十进制计算器。我尝试通过首先让用户输入一个他们试图计算的二进制值的字符串,然后使用这个字符串的长度来运行一个 for 循环来解决这个问题(如下面的代码所示)。计算器似乎工作正常,但当用户输入一个长于 20 位的二进制数(全为 1)时会失败。我收到一个 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;
}
}

【问题讨论】:

  • Long 不能超过 19 位
  • 不要使用nextLong(),然后使用Long.toString()。使用next()直接获取字符串,这样就没有长度限制了
  • 您可以使用scan.nextBigInteger() 获得更大的整数值。
  • 根据网上的二进制转十进制计算器,20位的二进制数是1048575。据我所知,longs可以容纳比这大得多的数字。

标签: java inputmismatchexception


【解决方案1】:

您想要使用scanner.nextLong(2) 的方式,其中2 是基数。然后你将读取一个实际的二进制数。

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

产生

144115188075855871

用于输入

111111111111111111111111111111111111111111111111111111111

【讨论】:

    【解决方案2】:

    如果我理解正确,您总是希望将二进制输入转换为十进制值。一个非常简单的解决方案如下所示:

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

    如果您对它的工作原理感兴趣,请查看 Integer.parseInt 的 java 源代码。

    【讨论】:

    • 我相信 OP 想自己转换数字。 (或不!)