声明可以直接打印Java的字符串数组

时间:2015-12-05 16:50:38

标签: java arrays object

鉴于此课程:

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()方法的情况下,我需要在驱动程序中更改哪些内容才能正确打印章节?

5 个答案:

答案 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将以正确的格式打印它。