2015-03-02 82 views
2

此代码有什么问题?我想插入数组cnew as if carr包含'a'cnew应该得到100(int),因为't'- cnew应该得到101(int),'g'-110和'c'-111。基于java中另一个数组中的值初始化数组

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

没有必要对嵌套循环:如果你想cnew包含int值,使之成为int阵列

[100, 101, 110, 111] 

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

产生以下数组。

+0

感谢INT [] cnew =新INT [LEN]我的错误是在这一行....谢谢 – 2015-03-02 08:06:21

0

没有必要嵌套循环,因为它你做了两次相同的操作。两个数组长度相同,所以他们可以使用一个索引。

我也可以提出较短的版本,配图:

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; 
    } 
} 
+0

这将是一个很好的地方使用JDK8流或番石榴函数,因为总之,这种方法是用来将字符串转换为Int数组:) – Beri 2015-03-02 08:32:18