Возвращаемое значение ArrayList

#java #arraylist #tostring

Вопрос:

Я выполняю практику Java, которая посоветовала мне написать метод toString, но я застрял с возвращаемым значением ArrayList. Для получения дополнительной информации, пожалуйста, прочтите комментарий к части toString.

 import java.util.ArrayList;
import java.util.Arrays;

public class Student {
    /** The student's name */
    private String name;
    /** Course codes which the student is enrolled in */
    private ArrayList<String> courses;

    /** Creates a new student with the given name.
     * @name the student's name
     */
    public Student(String name) {
        this.name = name;
        this.courses = new ArrayList<String>();
    }

    /** Enrol in a course.
     * @param course course code of the course being enrolled in. e.g. CSSE2002
     */
    public void addCourse(String course) {
        this.courses.add(course);
    }

    /**
     * Returns the human-readable string representation of this student.
     * The format of the string to return is
     * "'name': courses='courseCodes'" without the single quotes,
     * where 'name' is this student's name and 'courseCodes' is a comma-separated
     * list of this student's enrolled courses.
     * For example, if the student is enrolled several courses:
     * "John Smith: courses=CSSE2002,DECO3801".
     * If the student is enrolled in one course: "John Smith: courses=CSSE2002".
     * If the student is not enrolled in any courses: "John Smith: courses=NO_COURSES".
     * @return string representation of this student
     */
    public String toString() {
        
        Boolean CheckArray = courses.isEmpty();
        if(CheckArray == true){
            return this.name   ":"   " courses=NO_COURSES";
        }else{
            return this.name   ":"   " courses="   this.courses;
        }
        
    }
}
 

У меня постоянно возникает эта ошибка в моих тестовых случаях при запуске программы, введите описание изображения здесь

Я не знаю, как избавиться от лишнего [], это кажется глупым вопросом, и было бы неплохо, если бы кто-нибудь мог помочь. Спасибо!

Комментарии:

1. Вы можете показать тесты?

2. Это тесты, автоматически генерируемые из системы. У меня нет собственных тестовых примеров

3. Результаты теста могут вводить в заблуждение, поскольку они содержат дополнительные [] данные . Я думаю, что ваш строковый вывод включает [] в себя около курсов, и он не должен их содержать [] .

4. @khelwood Да, сначала я был сбит с толку этим, вот почему я попросил провести тесты. Но потом я увидел комментарии выше toString , в которых указано, какой результат ожидается.

5. Примечания: Нет причин использовать Boolean тип внутри toString() , используйте boolean вместо этого. Это разные типы и ArrayList::isEmpty() возвращают последние. Проверки типа «нравится CheckArray == true » бессмысленны, так как результат этого выражения является логическим и CheckArray уже имеет тип boolean. Так что ты можешь просто писать if (CheckArray) . И последнее, но не менее важное: по соглашению Java используется camelCase для имен локальных переменных, поэтому лучше изменить CheckArray на checkArray .

Ответ №1:

Согласно комментариям к коду, тестовые примеры, похоже, ожидают вывода, такого как:

 John Smith: courses=CSSE2002,DECO3801
 

Вы можете использовать String.join для объединения кодов курсов разделитель , :

 return this.name   ":"   " courses="   String.join(",", this.courses);
 

Ответ №2:

Возможным решением является форматирование выходных this.courses данных путем замены скобок пустой строкой.

 return this.name   ":"   " courses="   Arrays.toString(this.courses).replace("[", "").replace("]", "");