2017-03-31 17 views
1

スーパークラスのReadingMaterialと、新聞、マンガ、小説、TextBookなどのさまざまなサブクラスを持つJavaプログラムを作成しようとしています。現在、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 

} 
+2

'(int)(readMat1.getAuthor()。compareTo(readMat2.getAuthor()));)のキャストは、冗長です。表示されているコードには、アンバランスな中カッコがあり、コンパイルされません。 –

+0

この質問は、著者が提供されていないときに著者が表示されない理由を尋ねています。 –

+0

ところで、面倒な 'Date'クラスは' java.time.Instant'のようなjava.timeクラスに取って代わられています。 –

答えて

2

問題であり、それはwhですあなたはnew Newspaper("NewYork_Times")を実行しています。デフォルトのスーパーコンストラクタを使用していますが、argsはありません。つまり、authorが設定されていません。
そのため、あなたは(getAuthorリターンをnull)あなたのコンパレータにNULLポインタを取得している:

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

あなたは必要があります:あなたは、比較のために、著者に数える場合
1.は、あなたのコンパレータ
2にはnullチェックを追加しますそれをnullにすることはできません。それ以外のコンストラクタを持たないか、デフォルト値を設定してください。

+0

私はそれを修正していただきありがとうございます –

関連する問題