Подскажите,люди добрые, что не так?) Прошелся по опубликованным вопросам/ошибкам по этой задаче, недочеты устранил. Но валидатор все равно не пропускает. Валидацию не проходит toBinary(). Закомментированный код проверять не нужно, забыл удалить.
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static final String HEX = "0123456789abcdef";
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 int binaryToDecimal(String binaryNumber) {
int decimalNumber = 0;
if (binaryNumber != null && binaryNumber != ""){
for (int i=0; i<binaryNumber.length(); i++){
int index = binaryNumber.length() - 1 - i;
int value = Character.getNumericValue(binaryNumber.charAt(index));
decimalNumber += value * Math.pow(2, i);
}
return decimalNumber;
}else return 0;
}
public static String toHex(String binaryNumber) {
//напишите тут ваш код
if (binaryNumber == null || binaryNumber.equals("")){
return "";
}
for (int i=0; i<binaryNumber.length(); i++){
if (Character.getNumericValue(binaryNumber.charAt(i))==0 ||
Character.getNumericValue(binaryNumber.charAt(i))==1) {
}else return "";
}
while (binaryNumber.length()%4 !=0){
binaryNumber = 0 + binaryNumber;
}
String hexNumber = "";
int decimalNumber = binaryToDecimal(binaryNumber);
while (decimalNumber != 0){
hexNumber = HEX.charAt(decimalNumber%16) + hexNumber;
decimalNumber = decimalNumber/16;
}
return hexNumber;
}
public static int hexToDecimal(String hexNumber) {
//напишите тут ваш код
int decimalNumber =0;
if (hexNumber == null){
return decimalNumber;
}
for (int i=0; i<hexNumber.length(); i++){
char symbol = hexNumber.charAt(i);
decimalNumber = decimalNumber*16 + HEX.indexOf(symbol);
}
return decimalNumber;
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
String binaryNumber = "";
if (hexNumber == null || hexNumber.equals("")){
return binaryNumber;
}
for (int i=0; i<hexNumber.length(); i++){
if (HEX.indexOf(hexNumber.charAt(i))<0){
return binaryNumber;
}
}
int decimalNumber = hexToDecimal(hexNumber);
if (decimalNumber==0){
binaryNumber += "0";
}else {
while (decimalNumber != 0){
binaryNumber = decimalNumber%2 + binaryNumber;
decimalNumber = decimalNumber/2;
}}
while (binaryNumber.length()%4 !=0){
binaryNumber = "0" + binaryNumber;
}
return binaryNumber;
}
/*хуита
public static String toHex(String binaryNumber) {
//напишите тут ваш код
if (binaryNumber == null){
return "";
}
for (int i=0; i<binaryNumber.length(); i++){
if (Character.getNumericValue(binaryNumber.charAt(i))==0 ||
Character.getNumericValue(binaryNumber.charAt(i))==1) {
}else return "";
}
while (binaryNumber.length()%4 !=0){
binaryNumber = 0 + binaryNumber;
}
String hexNumber = "";
for (int i = 4; i <= binaryNumber.length(); i +=4){
String subStr = binaryNumber.substring(i-4, i);
int decimalNumber = 0;
for (int j=0; j<subStr.length(); j++){
int index = subStr.length() - 1 - j;
int value = Character.getNumericValue(subStr.charAt(index));
decimalNumber += value * Math.pow(2, j);
}
hexNumber = hexNumber + HEX.charAt(decimalNumber);
}
return hexNumber;
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
String binaryNumber = "";
if (hexNumber == null){
return binaryNumber;
}
for (int i=0; i<hexNumber.length(); i++){
char symbol = hexNumber.charAt(i);
int decimalNumber = HEX.indexOf(symbol);
if (decimalNumber<0){
return binaryNumber;
}else {
if (decimalNumber==0){
binaryNumber += "0000";
}
while (decimalNumber != 0){
binaryNumber = binaryNumber + decimalNumber%2;
decimalNumber = decimalNumber/2;
}
}
}
return binaryNumber;
}*/
}