这段代码有什么问题?我想插入数组cnew,如果carr包含'a'cnew应该得到100(int),因为't'- cnew应该得到101(int),'g'-110和'c'-111。
String s="atgc";
len=s.length();
char[] carr=s.toCharArray();
char[] cnew = new char[len];
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
if(carr[j]=='a'){
cnew[i]=100;
}else if(carr[j]=='t'){
cnew[i]=101;
}else if(carr[j]=='g'){
cnew[i]=110;
}else
cnew[i]=111;
}
}
答案 0 :(得分:0)
不需要嵌套循环:
String s="atgc";
int len=s.length();
char[] carr = s.toCharArray();
int[] cnew = new int[len];
for(int i=0;i<len;i++) {
if (carr[i]=='a'){
cnew[i]=100;
} else if(carr[i]=='t') {
cnew[i]=101;
} else if(carr[i]=='g') {
cnew[i]=110;
} else {
cnew[i]=111;
}
}
生成以下数组:
[100, 101, 110, 111]
如果您希望cnew
包含int
值,请将其设为int
数组。
答案 1 :(得分:0)
没有必要嵌套循环,因为你正在进行两次相同的操作。两个数组长度相同,因此可以使用一个索引。
我还可以使用Map:
建议更短的版本String s="atgc";
char[] carr=s.toCharArray();
char[] cnew = new char[carr.length];
Map<Character, Integer> mapping = new HashMap<Character, Integer>();
mapping.put('t',101);
mapping.put('a',100);
mapping.put('g',110);// this solution would be better for more letter mappings
for(int i=0;i<len;i++){
if(mapping.containsKey(carr[i])) {
cnew[i]=mapping.get(carr[i]);
} else {
cnew[i]=111;
}
}