物件導向進階時,if語句寫錯位置

程式設計師也可以裙子很長發表於2021-03-17

這周blog我也不知道要寫什麼,因為這章我其實學得有點懵,前面那幾天我糾結了好久程式碼,一直不知道原因錯在哪裡。後來經過詢問老師才知道自己呼叫錯了構造方法,相信也有跟我一樣的新手會犯這個錯誤。
我在建立關於介紹書的類的時候,有這麼一個規定,如果書的頁碼少於200頁就設定為預設200頁。
我的程式碼是這樣寫的:
package day05_task;

public class BookTest {

public static void main(String[] args) {
Book b1 = new Book("黑蘋果", 120);
Book b2 = new Book("灰栗子", 500);
b1.detail();
b2.detail();
}
}

class Book{ //定義一個類
//Book(){} //構架一個無實參的編譯器
Book(String title, int pageNum){ //構建一個有實參的編譯器

this.title = title; //賦值 變數給當前屬性
this.pageNum = pageNum;
}
//私有化類的屬性
private String title;
private int pageNum;
void detail(){
System.out.println("書名:" + getTitle() + "\n" + "頁數:" + getPageNum() + "\n");
}
//獲取可設定屬性變數的許可權 通過 public 和set語句
public void setTitle(String title){

this.title = title;
}
public String getTitle(){
return title;
}
public void setPageNum(int pageNum){
if(pageNum < 200)
this.pageNum = 200;
}
public int getPageNum(){
return pageNum;
}

}
大家可有發現什麼錯誤嗎?
我把public void setPageNum(int pageNum){
if(pageNum < 200)
this.pageNum = 200;
}
寫在了成員方法裡,而應該寫在構造方法裡。這個時候我就有疑問了,因為我是依樣畫葫蘆寫的,老師在視訊裡面也是寫在setter裡面的,為什麼我就不行呢?
後來問了老師後才知道,視訊里老師用的是無參構造器,我定義的是有參構造器!!!
所以按照我的思路,正確的程式碼應該是:
package day05_task;

public class BookTest {

public static void main(String[] args) {
Book b1 = new Book("黑蘋果", 100);
Book b2 = new Book("灰栗子", 500);
b1.detail();
b2.detail();
}
}

class Book{ //定義一個類
//Book(){} //構架一個無實參的編譯器
Book(String title, int pageNum){ //構建一個有實參的編譯器

this.title = title;
if(pageNum < 200) {
this.pageNum = 200;//賦值 變數給當前屬性
}else {
this.pageNum = pageNum;
}
}
//私有化類的屬性
private String title;
private int pageNum;
void detail(){
System.out.println("書名:" + getTitle() + "\n" + "頁數:" + getPageNum() + "\n");
}
//獲取可設定屬性變數的許可權 通過 public 和set語句
public void setTitle(String title){

this.title = title;
}
public String getTitle(){
return title;
}
public void setPageNum(int pageNum){
this.pageNum = pageNum;
}
public int getPageNum(){
return pageNum;
}

}

這周太忙,就寫這點點吧。。。

相關文章