2016-10-21 5 views
0

Я пытаюсь создать генетический алгоритм, и я получил этот код: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 символов (0 и 1), мне нужно эта строка является шестнадцатеричной строкой (без x), этот код делает это, проблема возникает, когда Long.parseLong() анализирует строку и возвращает шестнадцатеричное число с ведущими нулями (которое мне нужно) и дает мне эту ошибку :

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9 
+0

При запросе вопроса о коде всегда полезно включать тег для используемого вами языка. Вы можете заменить практически любой из тех, которые вы использовали, поскольку ни один из них не дает ясности вашему вопросу. –

+0

Да, извините, забыл – Ziklepmna

ответ

0

Вы можете попробовать следующую функцию которые передают длинные (многозначные) строки в шестнадцатеричные строки (String 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; если представительствоBinaria представляет собой метод или функцию, измените его на ... this.representacionBinaria(); Надеюсь, что это поможет.

+0

Извините, можете ли вы адаптировать его к моему коду? Я довольно новичок в программировании, и это сложно для меня. – Ziklepmna

+0

Это сработало! Огромное спасибо!! Но вторая часть добавления() для возврата this.representacionBinaria не сделала, это побуждает меня создавать «представительство» в качестве метода. Но в любом случае, теперь это работает как шарм! Благодаря! – Ziklepmna

Смежные вопросы