2016-10-21 18 views
0

私は遺伝的アルゴリズムを作成しようとしていると私はこのコードを持っている:JavaのString 16進文字列に

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)、私は必要なのランダムな文字列を生成し、このコードはそれを行います。Long.parseLong()は文字列を解析し、先頭のゼロ(これは私が必要です)を持つを返します。と私にこのエラーを与えます:

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

コードについて質問するときは、使用している言語のタグを含めると便利です。あなたの質問に明快さを与えるものはありませんので、あなたが使ったもののどれかを置き換えることができます。 –

+0

申し訳ありません、忘れました – Ziklepmna

答えて

0

次の機能を試すことができます長い(多くの文字)文字列を16進文字列に変換します(関数に渡される文字列は "... 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()); 

} 

私はまた 改行this.representacionBinariaで...)(あなたが引用され メソッドのコードパブリック文字列getRepresentacionBinariaにparethensisを追加する必要があることに言及することができます。 representacionBinariaがメソッドまたは関数を表す場合、this.representacionBinaria(); 上記が役立つことを願っています。

+0

申し訳ありません、あなたは自分のコードに適応できますか?私はプログラミングには新しく、これは私にとっては難しいものです。 – Ziklepmna

+0

それは働いた!どうもありがとうございます!!しかし、this.representacionBinariaを返すためのadded()の第2の部分は、メソッドとして 'representacionBinaria'を作成するように促します。しかし、とにかく、今は魅力のように動作します!ありがとう! – Ziklepmna

関連する問題