鉴于此课程:
public class Book {
private String bookName;
private String[] chapters = new String[9];
private int numberOfChapters;
public Book(String bn){
bookName = bn;
}
public Book(String b[]){
chapters = b;
}
public void addChapter(String chapter){
chapters[numberOfChapters] = chapter;
numberOfChapters++;
}
public String[] getChapter(){
return chapters;
}
public int getNumberOfChapters(){
return numberOfChapters;
}
public String getBookName(){
return bookName;
}
public String toString(){
return("Book Name: " + getBookName() + " chapters[] = " + getChapter() + " number of chapters : " + getNumberOfChapters());
}
}
我需要编写一个创建一个章节(字符串)数组的驱动程序,然后将其中的每个对象分配给Book对象。我的问题是,当我这样做时,toString()方法不能正确打印章节,而是返回内存地址。
这是我到目前为止所拥有的:
public class BookTest {
public static void main(String[] args) {
String[] BookArray = new String[9];
for(int i = 0; i<BookArray.length; i++){
BookArray[i] = new String("Chap"+(i+1));
}
Book b1 = new Book("Name1");
for(int i=0; i<BookArray.length; i++){
b1.addChapter(BookArray[i]);
}
System.out.println(b1.toString());
}
}
打印
Book Name: Name1 chapters[] = [Ljava.lang.String;@2a139a55 number of chapters : 9
在不更改toString()方法的情况下,我需要在驱动程序中更改哪些内容才能正确打印章节?
答案 0 :(得分:2)
在Arrays.toString(getChapter())
方法中使用toString
。我宁愿使用List<String>
而不是String数组,更容易添加和删除本书中的章节。或者可能是Map<int, String>
,这样您就可以添加带有ID的章节(例如第12章)和每章的名称。
答案 1 :(得分:0)
使用功能
Arrays.toString(chapters)
获得一个不错的输出。
答案 2 :(得分:0)
函数getChapters()返回内存地址,不打印数组。
要做到这一点,首先:
import java.util.Arrays;
然后:
使用Arrays类的toString()方法,以便在输出中返回数组的字符串格式。
public String toString(){
return("Book Name: " + getBookName() +
" chapters[] = " + Arrays.toString(getChapter()) +
" number of chapters : " + getNumberOfChapters());
}
答案 3 :(得分:0)
Array是Java中的Object。
Java语言规范写道:
在Java编程语言中,数组是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2)。可以在数组上调用Object类的所有方法。
因此打印Ljava.lang.String;@2a139a55
。
请参阅Is it possible in Java to override 'toString' for an Objects array?
答案 4 :(得分:0)
这可以通过多种方式实现......
1)
Arrays.toString(chapters)
获得一个不错的输出。
2)
您也可以使用: -
Arrays.asList(getChapter())
3)而不是 String [] 以这种方式使用列表 ... ...自动toString将以正确的格式打印它。