如何更改我对函数collate的调用,我希望它打印出collate(“hello”,“there”)是“htehlelroe”。
public class Collate {
public static void main(String[] args) {
String a = new String("hello");
String b = new String("there");
}
public String collate(String a, String b) {
String collate = new String();
for (int i = 0; i < a.length(); i++) {
collate = collate + a.substring(i);
collate = collate + b.substring(i);
collate(a, b);
System.out.println(collate);
}
return collate;
}
}
答案 0 :(得分:0)
这样做
public class Collate {
public static void main(String[] args) {
String a = new String("hello");
String b = new String("there");
System.out.print(collate(a,b));
}
public static String collate(String a, String b) {
String collate = new String();
for(int i=0;i<a.length();i++){
collate += a.charAt(i);
collate += b.charAt(i);
}
return collate;
}
}
答案 1 :(得分:0)
以下代码应该做你想要的。
我们必须在您的代码中更改内容:
collate必须是静态的,即main
你用相同的参数递归调用collate。事实上,我们只想整理字符串的提醒(一旦我们拍摄了第一个字符
你只是假设a和b的长度相等,只是试图在a的长度上循环。您应该始终陈述关于方法参数的假设。如果你用长于b的方式调用collate方法,你可能就不会得到你想要的东西了
不应该调用新字符串(&#34;某些&#34;)。这将创建一个字符串类型的新实例。 Java中的字符串是不可变的,因此没有理由这样做。虽然新的String()不会影响程序的语义,但它会对其性能产生严重影响,尤其是在循环中创建字符串时。
public class Collate {
public static void main(String[] args) {
String a = "hello";
String b = "there";
System.out.println(collate(a, b));
}
public static String collate(String a, String b) {
if (a.length() != b.length())
throw new IllegalArgumentException("Cannot collate strings of unequal size");
if (a.isEmpty())
return "";
else {
String collate = "";
StringBuilder result = new StringBuilder();
char firstCharacterOfA = a.charAt(0);
char firstCharacterOfB = b.charAt(0);
result.append(firstCharacterOfA);
result.append(firstCharacterOfB);
result.append(collate(a.substring(1), b.substring(1)));
return result.toString();
}
}
}
编辑:请注意,递归可能会在此处终止您的应用程序。如果传递的字符串很大,则可以遇到StackOverflow。此外,性能可能会受到影响,因为方法调用的成本很低。
如果你用迭代编写你的方法,例如像Ankush那样使用for循环,你将没有这样的问题。