簡體   English   中英

我的System.out.println(); 保持打印null而不是應打印的文本

[英]My System.out.println(); keeps printing null instead of the text it should print

我前一段時間啟動了Java,現在我正忙於抽象類。 我已經忙了兩天的代碼了,我找不到解決方法。 方法名稱可能不是英文,對此感到抱歉,但是我認為這不是一個太大的問題。 我不知道為什么輸出如下:null null null null null null null null null null null null null null null null null null null null null

我希望你們能幫助我。 我將不勝感激任何幫助! 提前致謝。

主類,它也是抽象的:

public abstract class Boek {
public String isbn;
public String auteur;
public String paginas;
public String titel;

public abstract void setIsbn(String isbn);
public abstract void getIsbn(); 
public abstract void setAuteur(String auteur);
public abstract void getAuteur();
public abstract void setPaginas(int paginas);
public abstract void getPaginas();
public abstract void setTitel(String titel);
public abstract void getTitel();

public static void main(String[] args) {
    Studieboek  sb = new Studieboek();
    Roman       ro = new Roman();
    Dichtbundel db = new Dichtbundel();

    sb.setAuteur("J.K. Rowling");
    sb.setIsbn("547896587412");
    sb.setPaginas(251);
    sb.setTitel("Harry Potter");
    sb.addNAuteur("R.K. Dale");
    sb.addOndertitel("Exactly");
    sb.printSB();

    ro.setAuteur("Suzanne Vermeer");
    ro.setIsbn("9632589632574");
    ro.setPaginas(311);
    ro.setTitel("De Zwarte Piste");
    ro.printRO();

    db.setAuteur("A.Y. Lmao");
    db.setIsbn("5781236985478");
    db.setPaginas(171);
    db.setTitel("Rijmen kreng");
db.addGedicht("Rijmpje");
    db.printDB();
}
}

第一子類:

public class Studieboek extends Boek {  
private String ondertitel;
private String nAuteur;

@Override
public void setIsbn(String isbn) {

}

@Override
public void getIsbn() {

}

@Override
public void setAuteur(String auteur) {

}

@Override
public void getAuteur() {

}

@Override
public void setPaginas(int paginas) {

}

@Override
public void getPaginas() {

}

@Override
public void setTitel(String titel) {

}

@Override
public void getTitel() {

}

public void printSB() {
    System.out.println(titel + " " + auteur + " " + paginas + " " + isbn + " " + ondertitel + " " + nAuteur);
}

public void addOndertitel(String ondertitel) {

}

public void addNAuteur(String nAuteur) {

}

此后我還有兩個子類,但是我認為代碼沒有必要工作,因為其他兩個子類中的代碼完全相同,並且給出的輸出完全相同。

再次感謝您的幫助。 提前致謝。

此致

您的二傳手什么也沒做。

例如,實現isbn的設置器的正確方法是:

@Override
public void setIsbn(String isbn) {
    this.isbn = isbn;
}

請注意它實際設置的部分。

您的吸氣劑同樣是錯誤的。 一個吸氣劑應該返回一些東西,即不被聲明為void並有一個return語句:

@Override
public String getIsbn() {
    return this.isbn;
}

我知道它們應該包含一個返回值,但是該返回值給出了一個錯誤,每當我將其保留為空時,它似乎都很好。 (從評論)

我猜錯誤是“無效方法無法返回任何東西”的東西,是的,這很好-除非您嘗試類似

System.out.println(sb.getIsbn()); // Will also print "null"

我把剩下的交給你。


獎勵1:如果仍然有一個抽象的父類,則可以將常見的getter和setter移到Boek而不僅僅是將它們聲明為abstract 這將使您不必再在每個子類中重新實現它們。

獎勵2:通常不鼓勵使用public字段(例如public String isbn; )。 您已經有了吸氣劑和吸氣劑,因此要使其protected (另請參見: 封裝 )。

獎勵3:正如Mike'Pomax'Kamermans在評論中所指出的那樣:您不想在Boek類中擁有main方法。 僅使用main方法創建一個單獨的“ application”類來啟動您的應用程序。

獎金4:我相信您要使用printSBprintROprintDB方法實現的標准方法是覆蓋toString()方法。 盡管對於您的特殊用例這可能有所不同。

使用它如下:

public class Studieboek extends Boek {
    ...

    @Override
    public String toString() {
        return this.isbn + " " + this.auteur; // Plus the others
    }
}

// No need to call an additional method, toString will be invoked automatically
System.out.println(db);

您的set和get方法為空。 您需要在setters設置一個值,然后在getters返回該值。

現在,您正在嘗試打印尚未設置的變量-是的,它將打印null

public class FooClass{
    private String foo;

    public void setFoo(String foo) {
        this.foo = foo;
    }

    public String getFoo() {
        return foo;
    }
}

您正在打印未設置其值的變量。 您已在setter方法中設置了變量值以打印值。 設置值的設置方法。 和getter方法返回值。

@Override
public void setTitel(String titel) {
     this.titel=titel;
}

@Override
public String getTitel() {
   return titel;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM