gpt4 book ai didi

java - 多个 for 循环迭代器的最佳实践

转载 作者:行者123 更新时间:2023-12-02 04:48:41 25 4
gpt4 key购买 nike

我正在尝试更改和反转数组。因此,我希望使用负迭代器(以访问初始数组值)和正迭代器(以写入新数组)进行循环。这是我此时的代码。 (对于那些了解一些生物学知识的人来说,这段代码编写了 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++;
}

正如您所注意到的,我有一个普通的 i 迭代器和一个额外的 j 迭代器,我只是不知道将其放在哪里。这是处理这种情况(需要两个迭代器)的最佳方法,还是如果我做得有点不同会更好?

最佳答案

您可以消除“第二个”迭代器(我的意思是循环计数器),例如

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

关于java - 多个 for 循环迭代器的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29453336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com