2014-10-20 148 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()这将是出界