【发布时间】: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