需要帮助修复错误。线程“main”java.util.InputMismatchException中的异常

时间:2014-02-02 00:55:10

标签: java

我有一个程序,我正在努力将二进制转换为十进制。该代码适用于用户输入的小二进制数,但是当我输入一个长二进制数时,会发生错误,我得到了这个。

线程“main”中的异常java.util.InputMismatchException:对于输入字符串:“01100101110011011010111000000101”     在java.util.Scanner.nextLong(Scanner.java:2271)     在java.util.Scanner.nextLong(Scanner.java:2225)     在Binary.binToDec(Binary.java:30)     在Driver.main(Driver.java:27)

这是我的代码有问题。

 public void binToDec() {

    long binary;

    Scanner num = new Scanner(System.in);
    binary = num.nextLong();
    System.out.println("You entered the binary number " + binary);
    pw.println("You entered the binary number " + binary);

    long decimal = 0;
    int power = 0;

    while (true) {
        if(binary == 0) {
            break;
        } else {
            long tmp = binary % 10;
            //System.out.print("tmp: " + tmp + "\n");

            decimal += tmp * Math.pow(2, power);

            //System.out.println("decimal1: " + decimal + "\n");
            //System.out.println("power: " + power + "\n");

            binary = binary / 10;

            //System.out.println("binary: " + binary + "\n");
            power++;
        }

    }
    System.out.println("The decimal conversion is " + decimal + "\n\n");
    pw.println("The decimal conversion is " + decimal + "\n\n");
}

我该如何解决这个问题?谢谢。

2 个答案:

答案 0 :(得分:1)

使用nextLong的重载版本来读取二进制输入

binary = num.nextLong(2);

答案 1 :(得分:0)

很明显,您输入的值通常超出Long变量的范围。

所以请在你的案例中尝试使用类似double的东西,其范围远大于长。

您需要稍微更改一下代码才能使用double。

希望这有帮助! 祝你好运!