我正在尝试更改和反转数组。因此,我希望循环使用负迭代器(访问初始数组值)和正迭代器(写入新数组)。这是我此时的代码。 (对于那些了解某些生物学的人来说,这段代码会写出DNA串的反向补码。)
final char[] DNA = {'G','A','T','T','A','C','A'};
char[] revComp = new char[DNA.length];
int j = 0;
for (int i = DNA.length - 1; i >= 0; i--) {
switch (DNA[i]) {
case 'A': DNA[i] = 'T'; break;
case 'T': DNA[i] = 'A'; break;
case 'C': DNA[i] = 'G'; break;
case 'G': DNA[i] = 'C'; break;
}
revComp[j] = DNA[i];
j++;
}
你会注意到,我有一个正常的迭代器和一个额外的j迭代器,我只是不知道放在哪里。这是处理这种情况的最佳方式(需要两个迭代器),或者如果我做得有点不同会更好吗?
答案 0 :(得分:2)
你可以消除你的“第二个”迭代器(我的意思是循环计数器),如
for (int i = 0; i < DNA.length; i++) {
switch (DNA[i]) {
case 'A':
DNA[i] = 'T';
break;
case 'T':
DNA[i] = 'A';
break;
case 'C':
DNA[i] = 'G';
break;
case 'G':
DNA[i] = 'C';
break;
}
revComp[i] = DNA[DNA.length - i - 1];
}
或者喜欢
for (int i = DNA.length - 1; i >= 0; i--) {
switch (DNA[i]) {
case 'A':
DNA[i] = 'T';
break;
case 'T':
DNA[i] = 'A';
break;
case 'C':
DNA[i] = 'G';
break;
case 'G':
DNA[i] = 'C';
break;
}
revComp[DNA.length - i - 1] = DNA[i];
}
两者都产生DNA
[C, T, A, A, T, G, T]
和revComp
[T, G, T, A, A, T, C]
当我用
检查时System.out.println("revComp: " + Arrays.toString(revComp));
System.out.println("DNA: " + Arrays.toString(DNA));