2014-12-05 2 views
0

Мое назначение - сделать метод, который возвращает подстроку, состоящую из значения, хранящегося в массиве, числа символов в строке ввода, так что давайте скажем, что array - {4, 2, 3, 2, 0}, а строка - «радон», тогда код должен возвращаться с помощью «Радо», «Ра», «Рад», «Ра», «»}. Мой код возвращается с { «Rado», «нулевой», «нулевой», «нулевой», «нулевой»}Мой код возвращает несколько нулей, и я не могу понять причину, по которой

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; 
} 
Смежные вопросы