2015-03-02 61 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