我正在使用人造DNA链分析仪,我需要为此创建补充链:
char [] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
注意:这些是20个字符,如果有帮助的话。
我无法对此进行硬编码,我需要使用一个循环来遍历每个角色并找出如何将A与T&#39进行交换(反之亦然)和G&# #39; s与C'(反之亦然。)
答案 0 :(得分:0)
最简单的解决方案:
char[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
char[] newTestStrand = new char[testStrand.length];
for (int i = 0, l = testStrand.length; i < l; i++)
{
if (testStrand[i] == 'A')
{
newTestStrand[i] = 'T';
}
else if (testStrand[i] == 'T')
{
newTestStrand[i] = 'A';
}
else if (testStrand[i] == 'C')
{
newTestStrand[i] = 'G';
}
else if (testStrand[i] == 'G')
{
newTestStrand[i] = 'C';
}
else
{
newTestStrand[i] = testStrand[i];
}
}
或使用switch语句(不确定是否允许使用它):
char[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
char[] newTestStrand = new char[testStrand.length];
for (int i = 0, l = testStrand.length; i < l; i++)
{
switch (testStrand[i])
{
case 'A':
newTestStrand[i] = 'T';
break;
case 'T':
newTestStrand[i] = 'A';
break;
case 'G':
newTestStrand[i] = 'C';
break;
case 'C':
newTestStrand[i] = 'G';
break;
default:
newTestStrand[i] = testStrand[i];
break;
}
}
但实际上我建议以某种方式表示掉期(键值对)并循环通过潜在的掉期。我坚持使用简单的解决方案,因为你说'#34;仅循环&#34;
答案 1 :(得分:0)
由于有人已经建议使用else / if方法,所以这里使用的是三元运算符:
char[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
char[] reversed = new char[testStrand.length];
for (int i = 0; i < testStrand.length; i++) {
if (testStrand[i] == 'A') {
reversed[i] = 'T';
} else if (testStrand[i] == 'T') {
reversed[i] = 'A';
} else if (testStrand[i] == 'C') {
reversed[i] = 'G';
} else if (testStrand[i] == 'G') {
reversed[i] = 'C';
} else {
reversed[i] = testStrand[i];
}
}
我注意到你问过如何在不同的数组中插入新值:
Character[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
List<Character> chars = Arrays.asList(testStrand);
chars.replaceAll(c -> {
switch (c) {
case 'A': return 'T';
case 'T': return 'A';
case 'C': return 'G';
case 'G': return 'C';
default: return c;
}
});
// print them out
chars.forEach(System.out::println);
但是,嘿,如果你感到疯狂:
hdfs dfs -ls
答案 2 :(得分:-1)
Jimmyv代码: 更好?
char[] complementstrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
for (int i = 0; i < complementstrand.length; i++) {
if (Character.toString(complementstrand[i]).equals("A")){
complementstrand[i] = "T".charAt(0);
}
else if (Character.toString(complementstrand[i]).equals("T")){
complementstrand[i] = "A".charAt(0);
}
else if (Character.toString(complementstrand[i]).equals("G")){
complementstrand[i] = "C".charAt(0);
}
else if (Character.toString(complementstrand[i]).equals("C")){
complementstrand[i] = "G".charAt(0);
}
}
System.out.println(Arrays.toString(complementstrand));