Направьте пожалуйста меня или валдитор =)
package com.javarush.task.pro.task09.task0908;
import java.util.Arrays;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
/*
Один из алгоритмов перевода десятичного числа в представление двоичного числа следующий:
while(десятичное число не равно 0) {
двоичное представление = остаток от деления десятичного числа на 2 + двоичное представление
десятичное число = десятичное число / 2
}
Один из алгоритмов перевода представления двоичного числа в десятичное число следующий:
for (int i = 0; i < длины двоичного представления; i++) {
десятичное число = десятичное число + число из двоичного представления * на 2 в степени i
}
*/
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) {
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)
return "";
}
String HEX = "0123456789abcdef";
String shesn = "";
if(binaryNumber.length()%4 != 0)
for (int i = 0; i <(binaryNumber.length()%4); i++) {
binaryNumber = "0"+ binaryNumber;
}
int firstLength = binaryNumber.length();
for (int i = 0; i <firstLength/4; i++) {
String tmp = binaryNumber.substring(0,4);
int des = 0;
for (int j = 0; j <tmp.length() ; j++) {
des = (int)(des + Character.getNumericValue(tmp.charAt(tmp.length()-1-j)) * Math.pow(2,j));
}
shesn = shesn + Character.toString(HEX.charAt(des));
String tmp2 = binaryNumber;
binaryNumber = "";
for (int j = 0; j <tmp2.length()-4; j++) {
binaryNumber = binaryNumber + Character.toString(tmp2.charAt(j+4));
}
}//напишите тут ваш код
return shesn;
}
public static String toBinary(String hexNumber) {
if(hexNumber == null || hexNumber.equals(""))
return "";
String HEX = "0123456789abcdef";
char[] execussion = HEX.toCharArray();
char[] protect = hexNumber.toCharArray();
for (int i = 0; i <protect.length; i++) {
int a = Arrays.binarySearch(execussion,protect[i]);
if(a<0)
return "";
}
int index = 0;
String dvoi = "";
for (int i = 0; i <hexNumber.length(); i++) {
index = Arrays.binarySearch(execussion,protect[i]);
for (int j = 0; j <4; j++) {
dvoi += index%2;
index /=2;
}
}
//напишите тут ваш код
return dvoi;
}
}
/*
Двоично-шестнадцатеричный конвертер
Публичный статический метод toHex(String) должен переводить строковое представление двоичного числа, полученное в качестве входящего параметра, из двоичной системы счисления в шестнадцатеричную и возвращать его строковое представление. А публичный статический метод toBinary(String) наоборот — из строкового представления шестнадцатеричного числа в строковое представление двоичного числа.
Методы работают только с не пустыми строками.
Если входящий параметр — пустая строка или null, то оба метода возвращают пустую строку.
Если входящий параметр метода toHex(String) содержит любой символ, кроме 0 или 1, то метод возвращает пустую строку.
Если входящий параметр метода toBinary(String) содержит любой символ, кроме цифр от 0 до 9 или латинскую букву от a до f (в нижнем регистре), то метод возвращает пустую строку.
Твоя задача — реализовать эти методы.
Один из алгоритмов перевода строкового представления двоичного числа в строковое представление шестнадцатеричного числа следующий:
Проверяем длину строки, полученной входящим параметром. Она должна быть кратна 4.
Если это не так, то добавляем нужное количество 0 в начало строки.
Берем каждые четыре символа (бита) и проверяем, какому символу шестнадцатеричной кодировки он соответствует.
Например:
двоичное представление — "100111010000", где "1001" — "9", "1101" — "d", "0000" — "0",
шестнадцатеричное представление — "9d0".
Один из алгоритмов перевода строкового представления шестнадцатеричного числа в строковое представление двоичного числа следующий:
Берем каждый символ и проверяем какому двоичному числу (4 бита) он соответствует.
Например:
шестнадцатеричное представление — "9d0", где "9" — "1001", "d" — "1101", "0" — "0000",
двоичное представление — "100111010000".
Метод main() не принимает участие в тестировании.
Requirements:
1. Нужно, чтобы метод toHex(String) был реализован согласно условию.
2. Нужно, чтобы метод toBinary(String) был реализован согласно условию.
3. Методы Integer.toBinaryString(int) и Long.toBinaryString(int) использовать нельзя.
4. Методы Integer.toHexString(int) и Long.toHexString(int) использовать нельзя.
5. Методы Integer.parseInt(String, int) и Long.parseLong(String, int) использовать нельзя.
6. Методы Integer.toString(int, int) и Long.toString(long, int) использовать нельзя.
7. Объект типа BigInteger использовать нельзя.
8. Объект типа BigDecimal использовать нельзя.
*/