2014-12-05 82 views
0

我的任務是創建一個方法,該方法返回由存儲在數組中的字符數組成的字符串組成的字符串,因此可以說,數組爲{4,2,3,2,0},字符串爲「氡」,代碼​​應該以{「Rado」,「Ra」,「Rad」,「Ra」,「」}返回。我的代碼返回與{「雷達」,「空」,「空」,「空」,「空」}我的代碼返回幾個空值,我無法弄清楚爲什麼

public static String[] stringHeads(int[] a, String b) 
{ 
int i=0; 
String[] c= new String[a.length]; 
if (((b.length() > 0) && (i) < a.length)) 
{ 
c[i] = b.substring(0,a[i]); 
i=i+1; 
} 
else if (a[i]> b. length()) 
{ 
c[i] = b; 
i++; 
} 
else 
{ 
c[i] = b.substring(0,0); 
i++; 
} 
return c; 
} 

回答

0

你需要做的是一段時間內的或循環或者你可以調用遞歸性。 您編寫的代碼只是運行ONCE而不進行迭代。 例如,你可以這樣做:

for(int i=0;i<a.size();i++) 
{ 
String[] c= new String[a.length]; 
if (((b.length() > 0) && (i) < a.length)) 
{ 
c[i] = b.substring(0,a[i]); 
} 
else if (a[i]> b. length()) 
{ 
c[i] = b; 
} 
else 
{ 
c[i] = b.substring(0,0); 
} 
return c; 
} 
} 
0

你忘了迭代所需的字符串長度的輸入數組。由於您已經添加了一些計數變量,我們可以簡單地使用它並添加兩行代碼,如下所示。

public static String[] stringHeads(int[] a, String b) 
{ 
int i=0; 
String[] c= new String[a.length]; 
while (i < a.length) { // loop here 
if (((b.length() > 0) && (i) < a.length)) 
{ 
c[i] = b.substring(0,a[i]); 
i=i+1; 
} 
else if (a[i]> b. length()) 
{ 
c[i] = b; 
i++; 
} 
else 
{ 
c[i] = b.substring(0,0); 
i++; 
} 
} // end while 
return c; 
} 

已經採取細看到你的代碼後,我想這是肯定地說,它可以簡化,因爲你可能會放棄所有檢查字符串長度爲String.substring已經不適合您。

public static String[] heads(int[] lens, String input) { 
    String[] ret = new String[lens.length]; 

    for (int index = 0; index != lens.length; ++index) { 
     ret[index] = (input.substring(0, lens[index])); 
    } 

    return ret; 
} 
相關問題