我的任务是创建一个方法,该方法返回一个子字符串,该子字符串由存储在给定字符串中的数组字符数中的值组成,因此假设该数组为{4,2,3,2,0}且字符串是" radon",然后代码应返回{" Rado"," Ra"," Rad"," Ra& #34;,"" }。我的代码返回{" Rado"," null"," null"," null"," null" }
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 :(得分: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;
}
}
答案 1 :(得分: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;
}