it seems to work properly, I have a problem with verifying the number system,
package com.codegym.task.task30.task3001;
/*
Numeral system converter
*/
import java.util.LinkedHashMap;
public class Solution {
public static void main(String[] args) {
Number number = new Number(NumberSystemType._10, "6");
Number result = convertNumberToOtherNumberSystem(number, NumberSystemType._2);
System.out.println(result); // 110 expected
number = new Number(NumberSystemType._16, "6df");
result = convertNumberToOtherNumberSystem(number, NumberSystemType._8);
System.out.println(result); // 3337 expected
number = new Number(NumberSystemType._16, "abcdefabcdef");
result = convertNumberToOtherNumberSystem(number, NumberSystemType._16);
System.out.println(result); // abcdefabcdef expected
}
public static Number convertNumberToOtherNumberSystem(Number number, NumberSystem expectedNumberSystem) {
// Map with key as string for number and value as int
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
int numberSystem = number.getNumberSystem().getNumberSystemIntValue();
int expectedSystem = expectedNumberSystem.getNumberSystemIntValue();
// sFCNS - Help string For Checking Number System
String sFCNS = "0123456789abcdef";
// arraysFCNS and intsArrayFCNS,temporary help arrays with String and Integer for data
String [] stringsArrayFCNS = sFCNS.split("");
int [] intsArrayFCNS = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
// Loop to put data in map from arraysFCNS and intsArrayFCNS
for (int i = 0; i < stringsArrayFCNS.length; i++) {
map.put(stringsArrayFCNS[i], intsArrayFCNS[i]);
}
// Check if number is in correct system
String temp = sFCNS.substring(numberSystem);
boolean check = false;
if (!temp.equals("")){
for (int i = 0; i < temp.length(); i++){
char letter = temp.charAt(i);
if (number.getDigit().toLowerCase().contains(String.valueOf(letter))) {
check = true;
break;
}
}
if (check){
throw new NumberFormatException();
}
}
StringBuilder sb = new StringBuilder();
if (expectedNumberSystem.getNumberSystemIntValue() == number.getNumberSystem().getNumberSystemIntValue()){
return new Number(expectedNumberSystem, number.getDigit());
}else {
int result = 0;
// Convert to 10 system
for (int i = 0; i < number.getDigit().length(); i++){
int num = map.get(number.getDigit().substring(i, i + 1));
result = result * numberSystem + num;
}
// Convert to expected system
while (result > 0) {
int rest = result % expectedSystem;
sb.insert(0, rest);
result = result / expectedSystem;
}
}
return new Number(expectedNumberSystem,sb.toString());
}
}