[英]Binary to Decimal calculator InputMismatchException
我的目標是創建一個簡單的二進制到十進制計算器。 我嘗試通過首先讓用戶輸入他們嘗試計算的二進制值的字符串,然后使用此字符串的長度來運行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;
}
}
使用scanner.nextLong(2)的方法,其中2是基數。 然后,您將讀取一個實際的二進制數。
long number = scanner.nextLong(2);
System.out.println(number);
產生
144115188075855871
用於輸入
111111111111111111111111111111111111111111111111111111111
如果我理解正確,那么您始終希望將二進制輸入轉換為十進制值。 一個非常簡單的解決方案如下所示:
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源代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.