簡體   English   中英

Java中的十進制到二進制賦值

[英]Decimal to binary assignment in Java

嗨我有一個任務,我必須轉換變量'二進制'(這是一個隨機二進制(例如11001))並打印它。

這很難,因為Java中沒有內置功能

示例:1010 = 1 * 2 ^ 3 + 0 * 2 ^ 2 + 1 * 2 ^ 1 + 0 * 2 ^ 0 = 8 + 0 + 2 + 0 = 10

我的代碼出了什么問題?

int a = 1;
int b = 0;
for (int i=binary.length()-1;i>0;i--){
    if (binary.charAt(binary.length()-1) == '1'){
        b += 1;
    if (binary.charAt(i) == '1'){
        for (int j=binary.length()-1;j>0;i--){
            a = a*2;
        }
    }
    }
}
System.out.println(a+b);

目前它只打印“1”

實際上在Integer有一個靜態方法, parseInt(String s, int radix)可以解決你的問題:

String binary = "11001010110";
int result = Integer.parseInt(binary, 2);

您正在迭代從最低有效數字到最高有效數字的字符(盡管您正在跳過最重要的數字),但由於某種原因,您始終檢查最后一個字符是否為“1”而不是檢查當前字符。

在循環中使用類似的代碼,我建議:

int result = 0;
int a = 1;
for (int i = binary.length() - 1; i >= 0; i--) {
    if (binary.charAt(i) == '1') {
        result += a; // this adds 2^k to the result for each '1' digit, since a is initialized
                     // to 2^0 and is multiplied by 2 in each iteration
    }
    a *= 2;
}

例如,如果binary初始化為“10010011”,則result147

您的代碼嘗試使用for循環計算2的每個冪,盡管Java中有更簡單的方法,但這是可以的。
按照您的標准,您可以這樣做:

String binary = "111011";
int sum = 0;
for (int i = binary.length() - 1; i >= 0 ; i--){
    if (binary.charAt(i) == '1'){
        int a = 1;
        for (int j = 1; j < binary.length() - i; j++) {
            a *= 2;
        }
        sum += a;
    }
}
System.out.println(sum);

它打印59
您的代碼中出錯的是條件i > 0
它應該是i >= 0否則你會失去字符串的第一個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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