Тестирование toString, но это не удается?

1

Используя этот код:

 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 для удаления конечной запятой и пробела

Теги:
string
arrays
tostring

3 ответа

0
Лучший ответ

Это приведет к возникновению java.lang.StringIndexOutOfBoundsException в случае пустой строки, поскольку у вас не будет запятой и пробелом.

s.delete(s.length()-2, s.length()-1);
  • 0
    я добавил if (! (s.equals (""))) {s.delete (s.length () - 2, s.length ()); } и до сих пор не работает
  • 0
    Мы можем помочь с тем, что мы можем видеть. Если мы не можем увидеть остальную часть вашего кода, мы не можем помочь. Или, по крайней мере, скажите нам, какое утверждение неверно, и мы можем помочь.
Показать ещё 8 комментариев
0

Вы удаляете только запятую, строка удаления должна быть s.delete(s.length()-2, s.length()); ,

(По соглашению, конечный индекс диапазона точек 1 проходит мимо последнего элемента диапазона. Это то же самое для String.substring() например.)

  • 0
    спасибо, что помогло, теперь все мои тесты проходят, кроме первого, я даже сделал, если (! (s.equals ("")))
0

Здесь один из способов сделать то, что вы хотите, не полагаясь на какие-либо математические трюки. Если длина равна нулю, метод возвращает пустую строку.

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();
}
  • 0
    о, да, умный, вот тактика, которую я не помню, чтобы убрать трейлинг персонажей

Ещё вопросы

Сообщество Overcoder
Наверх
Меню