繁体   English   中英

未提供时不显示作者值

[英]Author value does not display when not provided

我正在尝试创建一个Java程序,其中有超类ReadingMaterial和许多不同的子类,分别是Newspaper,Manga,Novel和TextBook。 现在,Readingmaterial具有3个数据成员,其他每个类别都有2个不同的数据成员。

我试图显示正在创建的字符串,例如:

allMat.add(new Newspaper("NewYork_Times"));

我想要“ NewYork_Times”和日期,要显示的作者可以告诉我我做错了什么吗?

ps:我是JAVA编程新手

报纸课

public class Newspaper
        extends ReadingMaterial {

    private String title = "BHCC_Newspaper";

    //public Newspaper(){}
    public Newspaper(String title) {
        this.title = title;
    }

    public Newspaper(String title, String author, boolean readingMaterial) {
        super(author, readingMaterial);
        this.title = title;
    }

    //getter
    public String getTitle() {
        return title;
    }

    // setter
    public void setTitle(String title) {
        this.title = title;
    }

    public void displayReadingMaterials() {
        System.out.println(getTitle() + "\n Microsoft recruited 15 students from a community college.\n");
    }
}

这是超类

public class ReadingMaterial implements Comparable {

    private String author = "Lydie";
    private boolean readingMaterial;
    private java.util.Date dateCreated;

    // no-arg constructor
    public ReadingMaterial() {
        dateCreated = new java.util.Date();
    }
    // arg constructor

    public ReadingMaterial(String author, boolean readingMaterial) {
        dateCreated = new java.util.Date();
        this.author = author;
        this.readingMaterial = readingMaterial;
    }
    // getters

    public String getAuthor() {
        return author;
    }

    public java.util.Date getDateCreated() {
        return dateCreated;
    }

    public boolean getReadingMaterial() {
        return readingMaterial;
    }
    // setters

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setReadingMaterial(boolean readingMaterial) {
        this.readingMaterial = readingMaterial;
    }

    public void displayReadingMaterials() {
        System.out.println("Written on " + getDateCreated() + " by " + getAuthor()
                + " on all ReadingMaterial: " + getReadingMaterial());
    }

//Comparator for sorting the list
     public static  Comparator <ReadingMaterial> testCompare = new Comparator <ReadingMaterial>(){

             public int compare(ReadingMaterial readMat1, ReadingMaterial readMat2){


             return (int) (readMat1.getAuthor().compareTo(readMat2.getAuthor()));
             }
     };
    @Override
    public String toString() {
        return "Written on " + dateCreated + " by " + author
                + " on all ReadingMaterial: " + readingMaterial;
    }

    @Override
    public int compareTo(Object t) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }



}

这是主要的

package readingmaterial;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.util.Collections;


public class ReadingFactory {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // create and initialize a newspaper, a manga, a textbook and a novel

        List<ReadingMaterial> allMat = new ArrayList<ReadingMaterial>();
        allMat.add(new Newspaper("NewYork_Times"));
        allMat.add(new Manga("Naruto"));
        allMat.add(new TextBook("Bible"));
        allMat.add(new Novel("Argonauts"));
        //Iterator<ReadingMaterial> readMat = all.iterator();

        System.out.println("ArrayList elements after sorting in ascending order : ");

       Collections.sort(allMat, ReadingMaterial.testCompare);

       for(ReadingMaterial str: allMat){
            System.out.println(str);

        //ReadingMaterial[] allMat={newspaper,manga,textbook,novel};
        //for(int i=0;i<4;i++){
          //   allMat[i].displayReadingMaterials();
        // }
    }
    // this method show the polymorphic call and display any reading material

}

问题在于,当您做new Newspaper("NewYork_Times")您使用的是默认的超级构造函数,没有args,这意味着未设置author
因此,您在比较器上获得了空指针( getAuthor返回空):

readMat1.getAuthor().compareTo(readMat2.getAuthor())

你应该:
1.将空检查添加到比较器
2.如果您依靠作者进行比较,则不能将其设为null。 要么没有构造函数,要么设置一个默认值(就像处理日期一样)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM