2017-04-13 56 views
0

我在看一個java教程,一旦他改變他的類有構造函數而不是在每個對象中定義每個變量,他所有的方法仍然有效。爲什麼現在我的方法不再工作,因爲我已經添加了構造函數?

我將它改爲構造函數,現在我所得到的全部爲0。

public class Volume3Lesson4Exercise1 { 

    public static void main(String[] args) { 

     groceryStore houstonStore = new groceryStore(534, 0.99, 429, 0.87); 
     groceryStore seattleStore= new groceryStore(765, 0.86, 842, 0.91); 
     groceryStore orlandoStore= new groceryStore(402, 0.77, 398, 0.79);  

     System.out.println("\nSeattle store revenue: "); 
     seattleStore.calculateGrossRevenue(); 

     System.out.println("\nOrlando Store Revenue: "); 
     orlandoStore.calculateGrossRevenue(); 

    } 

} 

class groceryStore { 
    int apples; 
    double applePrice; 
    int oranges; 
    double orangePrice; 

    groceryStore(int a, double ap, int o, double op){ 
     a= apples; 
     ap= applePrice; 
     o= oranges; 
     op= orangePrice; 
    } 

    double calculateGrossRevenue(){ 
     double grossRevenue; 

     grossRevenue= ((apples * applePrice)+ (oranges * orangePrice)); 

     return grossRevenue; 

    } 
} 

在以下代碼中,收入返回數字0作爲總收入。爲什麼?數字與以前一樣,但現在只是構造函數而不是每個對象的單個變量。

+5

變化'一個= apples'到'this.apples = A'。當然,其他領域也一樣。通常的慣例是爲參數和字段使用相同的名稱,並使用'this.apples = apples'。 –

+0

我試過了,它工作。出於某種原因,在幾年前某人拍攝的視頻中,他沒有添加這個詞,它仍然有效。 –

+0

重要的不是'這個'關鍵字。重要的是,您使用參數的值初始化字段,而不是使用字段的值初始化參數。 –

回答

2

值的構造函數中的分配必須改變順序,即

groceryStore(int a, double ap, int o, double op) { 
    apples = a; 
    applePrice = ap; 
    oranges = o; 
    orangePrice = op; 
} 

這樣做將意味着,傳遞給構造函數的參數值將被保存在實例變量(蘋果,applePrice等等),這是預期的行爲。原始代碼中顯示的分配無效,因此實例變量將保留其默認值,即所有數字的0

爲了更清楚,該this關鍵字應被用於所有的實例變量,即

groceryStore(int a, double ap, int o, double op) { 
    this.apples = a; 
    this.applePrice = ap; 
    this.oranges = o; 
    this.orangePrice = op; 
} 
+0

究竟是什麼意思?當我創建每個對象時,我在頂部分配了所有的值。那麼,他們爲什麼還是0呢?這是沒有道理的。 –

+3

它們保持爲'0',因爲沒有值實際分配給實例變量。分配總是發生在'='符號左側的參數上。查看構造函數中'='左邊的變量。例如,你在第一次調用時將'534'傳遞給'a',並且在構造函數中由'apples'覆蓋了'''',因爲你定義了'a = apples'(意思是「賦予'a' 「),因此'534'永遠不會被分配給'蘋果';相反,'a'獲得'apples'的值,這是默認值,即'0',因爲之前沒有賦值。 – PNS

+0

關於構造函數教的視頻沒有使用這個詞,他們仍然工作。我添加了這個詞,他們都工作。 –

相關問題