Используя этот код:
public String toString()
{
StringBuilder s = new StringBuilder();
for (int i = 0; i < length; i++)
{
s.append(i).append(":").append(arr[i]).append(", ");
}
s.delete(s.length()-2, s.length()-1);
return s.toString();
}
не проходит этот тест:
@Test
public void testToString()
{
BetterArray<String> b = new BetterArray<String>();
assertEquals("", b.toString());
b.add("hello");
assertEquals("0:hello", b.toString());
b.add("bye");
assertEquals("0:hello, 1:bye", b.toString());
b.add("adios");
assertEquals("0:hello, 1:bye, 2:adios", b.toString());
}
Он должен начинаться как пустая строка (""), я делаю это правильно? Я новичок в StringBuilder. Я использую s.delete для удаления конечной запятой и пробела
Это приведет к возникновению java.lang.StringIndexOutOfBoundsException в случае пустой строки, поскольку у вас не будет запятой и пробелом.
s.delete(s.length()-2, s.length()-1);
Вы удаляете только запятую, строка удаления должна быть s.delete(s.length()-2, s.length());
,
(По соглашению, конечный индекс диапазона точек 1 проходит мимо последнего элемента диапазона. Это то же самое для String.substring()
например.)
Здесь один из способов сделать то, что вы хотите, не полагаясь на какие-либо математические трюки. Если длина равна нулю, метод возвращает пустую строку.
public String toString() {
StringBuilder s = new StringBuilder();
for (int i = 0; i < length; i++) {
s.append(i);
s.append(":");
s.append(arr[i]);
if (i < (length - 1)) s.append(", ");
}
return s.toString();
}