我的目标是创建一个简单的二进制到十进制计算器。我尝试通过首先让用户输入他们尝试计算的二进制值的字符串,然后使用此字符串的长度来运行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;
}
}
答案 0 :(得分:2)
使用scanner.nextLong(2)的方法,其中2是基数。然后您将读取一个实际的二进制数字。
long number = scanner.nextLong(2);
System.out.println(number);
产生
144115188075855871
用于输入
111111111111111111111111111111111111111111111111111111111
答案 1 :(得分:1)
如果我对您的理解正确,那么您始终希望将二进制输入转换为十进制值。一个非常简单的解决方案如下所示:
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源代码。