我有一个调用类方法的main方法;
CourseListQ2 list = new CourseListQ2();
list.addCourse(new Course("Structure and Modelling", "Chemistry", 1));
list.addCourse(new Course("Design in Engineering", "Engineering", 1));
......
在我写的这个类中,我从main方法创建了一个对象数组,然后将其展开并删除了我不需要的值。然后,我编写了一个toString
方法,假设在一个新行上返回每个对象:
public String toString(){
return Arrays.toString(arrayCourses) ;}
然而,它将整个阵列返回到一行。显然,我误解了这种方法究竟做了什么。
我有两个想法,要么我想尝试将每个作为对象返回,比如getName()。toString(arrayCourses)+ getYear()。toString(arrayCourses)+“\ n”,
或者,也许我想创建一个添加新行的循环。然而,我认为这违背了使用toString
方法的目的,并且它仍然在输出的开头返回'['。
那么,任何人都可以解释为什么会发生这种情况并提出更好的方法吗?
答案 0 :(得分:1)
在您的示例Arrays.toString(arrayCourses)
中,您正在调用Arrays类的toString()方法,下面是Java Docs对该方法的说法:
返回指定内容的字符串表示形式 阵列。字符串表示由数组列表组成 元素,用方括号括起来(“[]”)。相邻的元素是 由字符“,”(逗号后跟空格)分隔。 通过String.valueOf(float)将元素转换为字符串。返回 如果a为null,则为“null”。
对于这种方法,我建议@dasblinkenlight建议。
答案 1 :(得分:0)
我误解了这种方法究竟做了什么。
Arrays.toString
将数组格式化为单个String
,其中各个元素的字符串表示以逗号分隔。
我想要尝试将每个作为对象返回,例如
getName().toString(arrayCourses) + getYear().toString(arrayCourses) + "\n"
这不会完全解决问题,因为Arrays.toString
插入的逗号会保留在那里。通常,在'\n'
实现中附加toString
不是一个好主意,因为它会假设调用者将使用字符串的方式。
或者,也许我想创建一个添加新行的循环。
这是一个更好的主意。使用StringBuilder
,并调用其append
方法两次 - 首先是对象,第二次是\n
字符。
注意:不要直接添加'\n'
,而是使用System.getProperty("line.separator");
获取系统特定的行分隔符。
StringBuilder res = new StringBuilder();
String newLine = System.getProperty("line.separator");
for (Course c : arrayCourses) {
res.append(c);
res.append(newLine);
}
答案 2 :(得分:0)
在toString()
方法中使用循环没有任何问题。但是,如果您使用Java8,则可以使用String.join。因此,如果您想在一行中只使用每个元素
return String.join('\n', arrayCourses);
答案 3 :(得分:0)
在Java中,每个对象都有一个toString()方法(如果你没有写一个,那么提供一个默认的方法)
如果我们尝试在集合对象上运行toString(),它会在所有对象上运行toString()方法,并在[]之间打印它们,由','
如果你想拥有自己的实现,那么我建议覆盖方法的toString()以你想要的方式打印值