2017-08-19 3 views
0

私のコードは、lonfのDNAストリングを含むファイル(つまり、CTAAATCGATGGCGATGATAAATG ...)から最も頻度の高いコドンを見つけることを目的としています。最初の位置posから始まり、3文字ごとに1コドンを構成する。私が持っている問題は、コードを実行するたびに文字列インデックスが範囲外であることがわかります。問題がライン上にあることを知っていますHashMapsを使用して文字列の頻度を調べる

str = line.substring(idx, idx + 2); 

しかし、それを修正する方法はわかりません。また、周波数を正確にカウントしているかどうかはわかりません。何度も見られるすべてのキーの値を増やす必要がありました。

public static void findgene(String line){ 
      int idx, pos; 
      int[] freq = new int[100]; 
      String str; 

      //pos is the position to start at 
      pos = 0; 
      idx = pos; 

      for(int i = 0; i < line.length(); i++){ 
       if(idx >= 0){ 
        //makes every three characters into a codon 
        str = line.substring(idx, idx + 2); 
        //checks if the codon was previously seen 
        if(genes.containsKey(str)){ 
         genes.put(str, freq[i]++); 
        } 
        idx = idx + 2; 
       } 
      } 
} 

答えて

0

ループの繰り返しごとにidxを2ずつ増やしています。しかし、あなたは上限値idxに制限を課すことはありませんでした。

したがってsubstring()関数のパラメータはすぐにラインで範囲の外に出る:

if(idx+2<=line.length()){ 
    //code here 
} 
:あなたがする必要がどのような

str = line.substring(idx, idx + 2); 

はに条件を変更しています

関連する問題