Тема в том, что перевод из 16ной в 2ую систему по факту у меня работает по всем условиям, но не проходит проверку валидатора. Из-за чео совершенно непонятно и может получится коллективным разумом найти причину? Как только этот код я не тестил, одно лишь второе условие не проходит. Посмотрел что в решении, так там все на else if завязано, не хотелось бы так делать, хотя это и самый быстрый способ...
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static void main(String[] args) {
String binaryNumber = "0";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
//напишите тут ваш код
String hexNumber = "";
int a;
if (binaryNumber == null || binaryNumber.equals("")) {
return hexNumber;
}
for (int i = 0; i < binaryNumber.length(); i++) {
a = binaryNumber.charAt(i);
if (binaryNumber.charAt(i) != 49 && binaryNumber.charAt(i) != 48) {
return hexNumber; // Тут нет возможности перевести
}
}
int decimalNumber = 0;
int index = binaryNumber.length() - 1;
for (int i = 0; i < binaryNumber.length(); i++) {
decimalNumber += Integer.parseInt(String.valueOf(binaryNumber.charAt(index))) * (int) Math.pow(2, i);
index--;
}
// return decimalNumber
String HEX = "0123456789abcdef";
while (decimalNumber != 0) {
index = decimalNumber % 16;
hexNumber = HEX.charAt(index) + hexNumber;
decimalNumber /= 16;
}
return hexNumber;
}
public static String toBinary (String hexNumber) {
//напишите тут ваш код
String HEX = "0123456789abcdef";
String binaryNumber = "";
int decimalumber = 0;
// Проверки
if (hexNumber == null || hexNumber.equals("")) {
return binaryNumber;
}
if (hexNumber == "0") {
return "";
}
for (int i = 0; i < hexNumber.length(); i++) {
for (int j = 0; j < HEX.length(); j++) {
if (hexNumber.charAt(i) == HEX.charAt(j)) {
break;
}
if (j == HEX.length() - 1 & hexNumber.charAt(i) != HEX.charAt(j)) {
return binaryNumber;
}
}
}
// Перевод из 16ной в 10ую
int index = hexNumber.length() - 1;
for (int i = 0; i < hexNumber.length(); i++) {
for (int j = HEX.length() - 1; j > 0; j--) {
if (hexNumber.charAt(i) == HEX.charAt(j)) {
decimalumber = decimalumber + (int)(j * Math.pow(16, index));
break;
}
}
index--;
}
while (decimalumber != 0) {
binaryNumber = decimalumber % 2 + binaryNumber;
decimalumber = decimalumber / 2;
}
return binaryNumber;
}
}