2012-10-24 184 views
0

我得到了一個惱人的問題,爲什麼當我第一次試圖編譯這個代碼時,在CameraPhone類編譯器下立即聲明的變量imageSize和memorySize給了我一個邏輯錯誤,但是當我在變量的末尾聲明變量時,代碼???變量範圍

假設存在Phone類。定義一個子類CameraPhone,它包含兩個實例變量:一個名爲imageSize的整數,表示每張圖片的大小(單位爲百萬像素,爲簡單起見,假設像素佔用一個字節 - 因此百萬像素等於兆字節)由2百萬像素組成)以及一個名爲memorySize的整數,表示相機內存中的千兆字節數(即4表示4 Gigabyes的內存)。有一個構造函數接受與上述兩個實例變量相對應的兩個整數參數,這些參數用於初始化相應的實例變量。還有一種名爲numPictures的方法,它返回(整數)相機內存可容納的圖片數量。不要忘記,一個千兆字節是1,000兆字節。

public class CameraPhone extends Phone { 

    public CameraPhone(int imageSize, int memorySize) { 
     this.imageSize = imageSize; 
     this.memorySize = memorySize; 
    } 

    public int numPictures() { 
     return memorySize * 1000/imageSize; 
    } 

    private int imageSize; private int memorySize; 

} 
+0

您可以發佈原始代碼和錯誤。 – Romski

+0

只需剪切並粘貼私人int imageSize; private int memorySize;立即在公共課堂下CameraPhone延伸電話{ – gucciv12

+2

該問題包含許多無關細節。請努力消除不必要的細節。例如「不要忘記,一個千兆字節是1000兆字節」不可能與有關變量範圍的問題有關。 –

回答

1

什麼是你得到的「邏輯錯誤」?如果你複製並粘貼問題中的代碼,它將毫無問題地工作,在所有的這裏你都聲明瞭屬性(又名「實例變量」) - 在開頭,最後它們都是一樣的只要你真的宣佈初始化他們的地方。我的意思是,只要這些行出現在類聲明內的任意位置(而不是方法中,提醒你)的代碼可以編譯:

private int imageSize; 
private int memorySize; 

此外,這是完全合法的使用this在構造函數中,那是而不是導致錯誤。這些屬性可以直接在聲明它們的地方初始化,或者在構造函數中初始化。

+0

這些是「MyProgrammingLab」在線練習的一部分,它使用某種網頁編譯器,但我將這些變量移回到類下,並在myProgrammingLab編譯器中重新運行,現在它不會給我任何錯誤。很奇怪 – gucciv12

+0

我敢打賭,錯誤是別的,你聲明屬性的實際_place_是無關緊要的。如果這個或其他答案對你有幫助,請不要忘記通過點擊左邊的複選標記來接受它。 –