2017-10-07 41 views
0

此代碼包含一些邏輯錯誤,但我有問題,他們察覺並根據這些邏輯錯誤修改增加正方形長度的代碼?

public class square { 
    private int sideLength; 
    private int area; 

    public square(int initialLength) { 
     sideLength = initialLength; 
     area = sideLength * sideLength; 
    } 

    public int area() { 
     return area; 
    } 

    public void grow() { 
     sideLength = 2 * sideLength; 
    } 
} 

程序應該基於邊長來計算面積,然後成長方更改代碼。它使邊長加倍。按照我現在設置的方式,該區域是否會隨着新尺寸的變化而變化?任何其他邏輯錯誤?

感謝,除非你已經設定他們

+0

歡迎來到Stack Overflow!爲什麼你會認爲這個區域(當平方最初構造時計算)會改變而沒有明確的代碼來改變它? – AJNeufeld

回答

1

事情並不在程序中發生的。你有兩個選擇。第一個是你總是分配sideLengtharea在同一時間。既然你不想重複代碼,因爲你不能再次調用構造函數,這是最好的做,在一個單獨的方法:

public class Square { 
    private int sideLength; 
    private int area; 

    public Square(int initialLength) { 
     setSideLength(initialLength); 
    } 

    // Separate method to update sideLength and area together. 
    private void setSideLength(int sideLength) { 
     this.sideLength = sideLength; 
     this.area = sideLength * sideLength; 
    } 

    public void grow() { 
     setSideLength(2 * sideLength); 
    } 

第二個選項是始終計算點播領域,而不將其存儲。由於計算簡單而快速,因此這是一個不錯的選擇:

public class Square { 
    private int sideLength; 

    public Square(int initialLength) { 
     this.sideLength = initialLength; 
    } 

    public void grow() { 
     sideLength *= 2; 
    } 

    // Calculate area on-demand 
    public int area() { 
     return sideLength * sideLength; 
    } 
}