Метод toDecimal(String) должен был реализован согласно условию. Так же можно?
public static int toDecimal(String binaryNumber) {
int decimalNumb = 0;
if (binaryNumber == null || binaryNumber.isBlank()){ // isBlank - true если пустые символы
return decimalNumb;
}
for (int i = 0; i < binaryNumber.length(); i++) {
int extremeIndex = binaryNumber.length() - 1 - i;
int curntvalue = binaryNumber.charAt(extremeIndex) == '1' ? 1 : 0;
if (curntvalue == 0) continue;
decimalNumb = (int) (curntvalue * Math.pow(2,i));
}
return decimalNumb;
}
package com.javarush.task.pro.task09.task0906;
import java.util.regex.Pattern;
/*
Двоичный конвертер
*/
public class Solution {
public static void main(String[] args) {
int decimalNumber = Integer.MAX_VALUE;
System.out.println("Десятичное число " + decimalNumber + " равно двоичному числу " + toBinary(decimalNumber));
String binaryNumber = "1111111111111111111111111111111";
System.out.println("Двоичное число " + binaryNumber + " равно десятичному числу " + toDecimal(binaryNumber));
}
public static String toBinary(int decimalNumber) {
String binaryNumb = "";
if (decimalNumber <= 0){
return binaryNumb;
}
while (decimalNumber != 0) {
binaryNumb = ( decimalNumber % 2 + binaryNumb);
decimalNumber /= 2;
}
return binaryNumb;
}
public static int toDecimal(String binaryNumber) {
int decimalNumb = 0;
if (binaryNumber == null || binaryNumber.isBlank()){ // isBlank - true если пустые символы
return decimalNumb;
}
for (int i = 0; i < binaryNumber.length(); i++) {
int extremeIndex = binaryNumber.length() - 1 - i;
int curntvalue = binaryNumber.charAt(extremeIndex) == '1' ? 1 : 0;
decimalNumb = (int) (curntvalue * Math.pow(2,i));
}
return decimalNumb;
}
}
И откуда у тебя взялась 38 строка в этом цикле я ума не приведу. Ты хотел число задом наперёд посчитать?Такс, надо таки иногда вспоминать математику, тут все верно. Ошибка у тебя в другом была, цикл поправил. Ты ж в цикле по сути теряешь предыдущее значение decimal, которое посчитано до сих пор. Точнее сказать ты просто считал десятичную версию одного старшего бита. У тебя и 100 это 4 (верно) и 101 это 4, и 110 и 111 потому как все младшие биты ты отбрасываешь так. P.S. Где-то в курсе есть забавная задачка про степени двойки, тут можно воспользоваться аналогичным подходом, через битовый сдвиг decimalNumb += current << i; Например 2 в 0 степени это 1 сдвинутая на 0 = 1, чему нулевая степень и равна 2 в 1 степени это 2, так как 1 сдвинутая на 1 превращается в 10 (2) 2 в 2 степени это 4, так как 1 сдвинутая на 2 превращается в 100 (4) Ну а ноль в какую степень ни возвозди и куда ни двигай, он все равно нолём и остантся