#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("]", "");