我正在尝试对方法执行测试:
public String[] getFooBar(int size) {
String[] stringsArray = new String[100];
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <= size; i++) {
stringBuilder.append(String.format(i + " "));
if (i % 3 == 0) {
stringBuilder.append(String.format("Foo"));
}
if (i % 5 == 0) {
stringBuilder.append(String.format("Bar"));
}
stringBuilder.append(System.lineSeparator());
stringsArray[i] = stringBuilder.toString();
}
return stringsArray;
}}
我尝试在数组上使用索引,使用Array.ToString将其转换为字符串,并将其与字符串值进行比较,例如。"FooBar“。当我试图寻找一个索引时发生了什么。我从表中得到从0- 50开始的所有索引。我试过做ArrayList,但结果是一样的。有没有人教我怎么测试这个方法?
发布于 2020-01-31 03:01:25
这个问题的原因是,您经常附加StringBuilder,然后将每个索引设置为该附加的值。这意味着每个索引将如下所示:
index 0: 0
index 1: 0 1
index 2: 0 1 2
index 3: 0 1 2 3 foo
index 4: 0 1 2 3 foo 4
index 5: 0 1 2 3 foo 4 5 bar我假设这是与FizzBuzz相同的概念,这意味着您很可能会遇到另一个问题:您每次都要附加索引,而不管它是3的倍数还是5的倍数。我非常确定您不希望这样。你可能想要更接近这个的东西:
public String[] getFooBar(int size) {
String[] stringsArray = new String[100];
for (int i = 0; i <= size; i++) {
StringBuilder stringBuilder = new StringBuilder();
if (i % 3 == 0) {
stringBuilder.append(String.format("Foo"));
}
if (i % 5 == 0) {
stringBuilder.append(String.format("Bar"));
}
if(i % 5 != 0 && i % 3 != 0) {
stringsArray[i] = Integer.toString(i);
} else {
stringsArray[i] = stringBuilder.toString();
}
}
return stringsArray;
}但实际上并不需要所有这些。你可以这样做:
public String[] getFooBar(int size) {
String[] arr = new String[100];
for(int i = 0; i <= size; i++) {
String str = ""; // In situations like this the JVM turns this into a StringBuilder behind the scenes
if(i % 3 == 0) {
str += "Foo";
}
if(i % 5 == 0) {
str += "Bar";
}
if(i % 3 != 0 && i % 5 != 0) {
arr[i] = Integer.toString(i);
} else {
arr[i] = str;
}
}
return arr;
}https://stackoverflow.com/questions/59992522
复制相似问题