基于java中另一个数组中的值初始化数组

时间:2015-03-02 07:56:01

标签: java arrays

这段代码有什么问题?我想插入数组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;


    }
}

2 个答案:

答案 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;
   }
}