2014-10-20 142 views
0

我想弄清楚一部分的任務,我一直在我的頭撞牆一段時間了。我試圖將DNA序列轉錄成RNA序列。但是,我得到一個ArrayOutOfBoundsException。我是使用增強for循環迭代的新手,所以我的錯誤可能隱藏在某處。直到if語句參數被滿足纔會發生。ArrayIndexOutOfBounds增強for循環

private String dnaToRNA(String input) { 

    StringBuilder b = new StringBuilder(); 
    char[] arr = input.toCharArray(); 
    for (char a : arr) { 
     if (a == 'T') { 
      arr[a] ='U'; 

     } 
    } 
    for (char a : arr) { 
     if (a == 'A'){ 
      b.append ('U'); 
     } 

     else if (a == 'U') { 
      b.append('A'); 
     } 

     else if (a == 'C') { 
      b.append('G'); 
     } 

     else if (a == 'G') { 
      b.append('C'); 
     } 

    } 


    return b.reverse().toString(); 
} 

} 

    public void transcribe(int pos1) { 

    if (pos1 > linkedList.size()) { 
     System.out.println("Position selected out of range"); 
     return; 
    } 
    if (linkedList.get(pos1) != null && isValidDNA(linkedList.get(pos1))) { 
     linkedList.set(pos1, dnaToRNA(linkedList.get(pos1))); 
    } 
} 
+1

更換'如果(POS 1> linkedList.size())'和'如果(POS 1> = linkedList.size())'因爲索引是0〜基於java – 2014-10-20 19:32:23

+0

如果我真的這樣做,我會得到相同的錯誤消息。 – Mk2004 2014-10-20 19:35:22

回答

3

的問題是在聲明arr[a] ='U';

的問題是,char表示爲內部的int'T'等於84,因此你會得到一個ArrayIndexOutOfBoundsException。 您需要遍歷其與傳統的櫃檯:

for (int i = 0; i < arr.length; i++) { 
    if (arr[i] == 'T') { 
     arr[i] ='U'; 
    } 
} 
+0

這樣做......非常感謝!我想知道這是不是使用該迭代器的問題。非常感謝! – Mk2004 2014-10-20 19:41:31

0

你要1比尺寸小,所以:if (pos1 >= linkedList.size()) {

pos1 == linkedList.size()這將是出界