簡體   English   中英

二進制到十進制計算器InputMismatchException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM