Десятичное к двоичному присваиванию в Java - PullRequest
0 голосов
/ 15 ноября 2018

Привет, у меня есть задание, в котором я должен преобразовать переменную 'binary' (которая является случайным двоичным файлом (например, 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»

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Вы перебираете символы от младшей значащей цифры к самой значимой (хотя вы пропускаете самую значимую цифру), но по какой-то причине вы всегда проверяете, является ли последний символ «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", result равно 147.

0 голосов
/ 15 ноября 2018

Ваш код пытается вычислить каждую степень 2 с помощью цикла for, что нормально, хотя в 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, иначе вы потеряете 1-й символ строки.

0 голосов
/ 15 ноября 2018

На самом деле в Integer, parseInt(String s, int radix) есть статический метод, который может решить вашу проблему:

String binary = "11001010110";
int result = Integer.parseInt(binary, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...