ArrayIndexOutOfBounds on增强的for循环

时间:2014-10-20 19:30:32

标签: java

我正在试图弄清楚任务的一部分,而且我已经在墙上撞了一段时间了。我正在尝试将DNA序列转录成RNA序列。但是,我得到一个ArrayOutOfBoundsException。我是新手使用增强型for循环进行迭代,所以我的错误可能隐藏在某处。只有满足if语句参数才会发生。

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)));
    }
}

2 个答案:

答案 0 :(得分:3)

问题出在声明arr[a] ='U';

问题在于char在内部表示为int'T'等于84,因此您获得了ArrayIndexOutOfBoundsException。 你需要用传统的计数器迭代它:

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

答案 1 :(得分:0)

你希望1小于大小,所以:if (pos1 >= linkedList.size()) {

pos1 == linkedList.size()超出范围时