我正在尝试回答java中的以下面试问题,看起来他们不喜欢我的回答(见下文),任何人都可以善意地解释为什么它不起作用?谢谢!
给定一个字符串和一个非负的int n,我们会说字符串的前面是前三个字符,或者如果字符串小于长度3则是那里的任何字符。返回前面的n个副本;
frontTimes("Chocolate", 2) → "ChoCho" frontTimes("Chocolate", 3) → "ChoChoCho" frontTimes("Abc", 3) → "AbcAbcAbc"
这是我的代码:
public String frontTimes(String str, int n) {
String part = str.substring(0,3);
String result = part.repeat(n);
return result;
}
这是他们的解决方案:
public String frontTimes(String str, int n) {
int frontLen = 3;
if (frontLen > str.length()) {
frontLen = str.length();
}
String front = str.substring(0, frontLen);
String result = "";
for (int i=0; i<n; i++) {
result = result + front;
}
return result;
}
答案 0 :(得分:1)
最根本的是,String
没有repeat
方法,因此part.repeat(n)
根本无法编译。
如果str.substring(0, 3)
少于3个字符,str
会失败,还会出现运行时错误。
int frontLen = Math.min(3, str.length());
,它更具可读性。 result
应该在StringBuilder
中累积,以避免重复的字符串构造:
StringBuilder sb = new StringBuilder(front.length() * n);
for (int i = 0; i < n; ++i) {
sb.append(front);
}
return sb.toString();
答案 1 :(得分:1)
安迪的回答几乎涵盖了不正确的内容。但是,您可以简单地编写一些单元测试来检查代码是否按预期工作,而不是询问哪些不正确:
@Test
public void testFrontTimesMethod() {
Assert.assertEquals("ChoCho", frontTimes("Chocolate", 2));
Assert.assertEquals("ChoChoCho", frontTimes("Chocolate", 3));
Assert.assertEquals("AbcAbcAbc", frontTimes("Abc", 3));
Assert.assertEquals("AbAbAbAbAbAbAbAbAbAb", frontTimes("Ab", 10));
Assert.assertEquals("", frontTimes("", 5));
}