#java #binary #hex #long-integer
#java #двоичный #шестнадцатеричный #длинное целое число
Вопрос:
Я пытаюсь создать генетический алгоритм, и у меня есть этот код:
public Cromosoma() {
this.setRepresentacionBinaria(this.generarAleatoriamenteCromosoma());
}
private String generarAleatoriamenteCromosoma() {
String cromosoma = "";
for (int i = 1; i <= 40; i ) {
cromosoma = ((int) (Math.random() * 10)) % 2;
}
return cromosoma;
}
public String getRepresentacionBinaria() {
return this.representacionBinaria;
}
public String getRepresentacionHexadecimal() {
return Long.toHexString(Long.parseLong(this.getRepresentacionBinaria(), 2));
}
getRepresentacionBinaria () генерирует случайную строку из 40 символов (0s и 1s), мне нужно, чтобы эта строка была шестнадцатеричной строкой (без x), этот код делает это, проблема возникает, когда Long.parseLong() анализирует строку и возвращает шестнадцатеричное число с начальными нулями (которое мне нужно) и выдает мне эту ошибку:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9
Комментарии:
1. Задавая вопрос о коде, всегда полезно указать тег для языка, который вы используете. Вы можете заменить практически любую из тех, которые вы использовали, поскольку ни одна из них не вносит ясности в ваш вопрос.
2. Да, извините, забыл
Ответ №1:
Вы можете попробовать следующую функцию, которая преобразует длинные (многосимвольные) строки в шестнадцатеричные строки (Строка ss, передаваемая функции, может иметь вид «…0010 ..1 ..», то есть символы «0» и «1».
public String gettohexastring (String ss)
{
String toBuild="";
String toRet="";
int endi=ss.length();
int begi=endi;
for(int ii=0;ii<ss.length()-4;ii =4)
{
endi=ss.length()-ii;
begi=endi-4;
String test=ss.substring(begi, endi);
toBuild =Long.toHexString(Long.parseLong(test),2);
}
endi=begi;
begi=0;
toBuild =Long.toHexString(Long.parseLong(ss.substring(begi,endi),2));
//To Reverse hex symbols
for(int ii=toBuild.length();ii>=1;ii--)
{
toRet =toBuild.substring(ii-1, ii);
}
return toRet;
}
Чтобы адаптировать этот метод к вашему цитируемому коду, вам нужно добавить этот метод в свой класс (просто добавив его в качестве открытого метода к остальным общедоступным методам, которые вы указали), и вам, возможно, также придется изменить последний метод, который вы указали, на этот:
public String getRepresentacionHexadecimal() {
return this.gettohexastring(this.getRepresentacionBinaria());
}
Я также могу упомянуть, что вам, возможно, придется добавить parethensis в ваши кавычки
общедоступная строка кода метода getRepresentacionBinaria() … в
строка возвращает this.representacionBinaria ; если representacionBinaria представляет метод или функцию, измените его на …this.representacionBinaria();
Надеюсь, вышесказанное поможет.
Комментарии:
1. Извините, вы можете адаптировать это к моему коду? Я довольно новичок в программировании, и это сложно для меня.
2. Это сработало! Большое вам спасибо!! Но вторая часть добавления () для возврата this.representacionBinaria этого не сделала, она предлагает мне создать ‘representacionBinaria’ в качестве метода. Но в любом случае, теперь это работает как по волшебству! Спасибо!