Ребят, не могу понять почему первые два условия не соблюдены, спасибо заранее за помощь !
package com.javarush.task.pro.task09.task0908;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static void main(String[] args) {
String binaryNumber = "100111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
//check exception
if (binaryNumber == null) return "";
//To be able to add new chars to String
StringBuilder forConvertation = new StringBuilder(binaryNumber);
StringBuilder constructLine = new StringBuilder();
//Not to calculate every time
int lineLength = binaryNumber.length();
int rest = lineLength % 4;
//To check content and avoid something distinct from 1 and 0
char[] arrayToCheck = binaryNumber.toCharArray();
//check exception
for (int i = 0; i < lineLength - 1; i++) {
if (arrayToCheck[i] != '1' && arrayToCheck[i] != '0') return "";
}
//main logic
if (rest != 0) {
rest = 4 - rest;
for (int i = 0; i < rest; i++) {
forConvertation.append('0');
}
}
for (int i = 0; i < lineLength; i+=4) {
String fourChars = forConvertation.substring(i, i+4);
switch (fourChars) {
case "0000" -> constructLine.append("0");
case "0001" -> constructLine.append("1");
case "0010" -> constructLine.append("2");
case "0011" -> constructLine.append("3");
case "0100" -> constructLine.append("4");
case "0101" -> constructLine.append("5");
case "0110" -> constructLine.append("6");
case "0111" -> constructLine.append("7");
case "1000" -> constructLine.append("8");
case "1001" -> constructLine.append("9");
case "1010" -> constructLine.append("a");
case "1011" -> constructLine.append("b");
case "1100" -> constructLine.append("c");
case "1101" -> constructLine.append("d");
case "1110" -> constructLine.append("e");
case "1111" -> constructLine.append("f");
}
}
return constructLine.toString();
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
if (hexNumber == null) return "";
int lineLength = hexNumber.length();
char[] arrayToCheck = hexNumber.toCharArray();
StringBuilder binarySB = new StringBuilder();
for (int i = 0; i < lineLength - 1; i++) {
if (arrayToCheck[i] != '0' && arrayToCheck[i] != '1' && arrayToCheck[i] != '2' && arrayToCheck[i] != '3' &&
arrayToCheck[i] != '4' && arrayToCheck[i] != '5' && arrayToCheck[i] != '6' && arrayToCheck[i] != '7' &&
arrayToCheck[i] != '8' && arrayToCheck[i] != '9' && arrayToCheck[i] != 'a' && arrayToCheck[i] != 'b' &&
arrayToCheck[i] != 'c' && arrayToCheck[i] != 'd' && arrayToCheck[i] != 'e' && arrayToCheck[i] != 'f') return "";
}
for (char item :
hexNumber.toCharArray()) {
switch (item) {
case '0' -> binarySB.append("0000");
case '1' -> binarySB.append("0001");
case '2' -> binarySB.append("0010");
case '3' -> binarySB.append("0011");
case '4' -> binarySB.append("0100");
case '5' -> binarySB.append("0101");
case '6' -> binarySB.append("0110");
case '7' -> binarySB.append("0111");
case '8' -> binarySB.append("1000");
case '9' -> binarySB.append("1001");
case 'a' -> binarySB.append("1010");
case 'b' -> binarySB.append("1011");
case 'c' -> binarySB.append("1100");
case 'd' -> binarySB.append("1101");
case 'e' -> binarySB.append("1110");
case 'f' -> binarySB.append("1111");
}
}
return binarySB.toString();
}
}
