我有一个程序,我正在努力将二进制转换为十进制。该代码适用于用户输入的小二进制数,但是当我输入一个长二进制数时,会发生错误,我得到了这个。
线程“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");
}
我该如何解决这个问题?谢谢。
答案 0 :(得分:1)
使用nextLong
的重载版本来读取二进制输入
binary = num.nextLong(2);
答案 1 :(得分:0)
很明显,您输入的值通常超出Long变量的范围。
所以请在你的案例中尝试使用类似double
的东西,其范围远大于长。
您需要稍微更改一下代码才能使用double。
希望这有帮助! 祝你好运!