2014-10-19 61 views
0

下面是我的Range類的代碼的一部分,以及一個名爲Tree的單獨類中的構造函數。在這個構造函數中,我試圖將類範圍內的對象實例化到我的樹類中。當我嘗試在樹類中編譯我的構造函數時,它說我嘗試調用的方法不能從靜態上下文中引用。我是否以正確的方式去做這件事?我很確定這是一個很容易解決的問題,但我無法弄清楚。由於如何在構造函數中調用方法?

public class Range{ 
    int low, high; 

    public Range(int plow, int phigh){ 
     low = plow; 
     high = phigh; 
    } 

    public int getLow(){ 
     return low; 
    } 

    public int getHigh(){ 
     return high; 
    } 

public class Tree { 
String name; 

    public Tree(String pname, int plow, int phigh) { 
     name = pname; 
     Range.getHigh() = phigh; <---where error message is 
     Range.getLow() = plow; 
    } 
} 
+0

你瞄準什麼語言使用? – rhughes 2014-10-19 08:42:09

+0

你會在這種情況下使用setter,而不是getter。或者,更好的是,你已經擁有的構造函數。 – qqilihq 2014-10-19 08:42:34

+0

使用setter設置Low()和High(),在構造函數中調用它 – 2014-10-19 08:54:43

回答

2

你的代碼有兩個問題:第一,getLow()getHigh()例如方法,而不是類方法。但是,您可以撥打電話Range.getLow()Range.getHigh(),這意味着您可以撥打Range。這是不允許的。首先,你必須創建類的實例:

ran = new Range(...) 

然後調用這個實例的方法:

ran.getHigh(); 
ran.getLow(); 

的另外一個問題你的代碼是,你正試圖assing值方法調用:

Range.getHigh() = phigh; 

這在Java中是不可能的。 Java方法返回值,您不能分配給一個值。也就是說,方法getHigh()getLow()的意思是讀取一個範圍的高低值,而不是設置爲他們。對於類Range,只能通過調用構造函數來設置這些值。

什麼你可能想要做的,是Range類型的成員變量添加到Tree類,然後設置變量在構造函數:

ran = new Range(plow, phigh); 
+1

非常好的答案,也專注於他首先要做的事情,而不是把所有事情都變成靜態的。 +1 – Martijn 2014-10-19 09:05:25

+0

所以我會通過ran = new Range(...)調用Range類,那麼在括號中會出現什麼? = s,這會在所有方法之外被調用嗎? – 2014-10-20 09:27:41

+0

你在編寫構造函數的參數時使用了缺口。在這種情況下,有兩個參數,所以你可以在答案的最後一行中調用它。你必須在所有方法之外聲明實例變量'ran'「('Range ran;');然而,你必須從構造函數調用'Range'構造函數,因爲在構造函數之外,你不能訪問'plow'和'phigh'。 – Hoopje 2014-10-20 11:28:41

0

你必須做範圍的對象後,才能調用其方法

public Tree(String pname, int plow, int phigh){ 
     name = pname; 
     Range ran = new Range(phigh, plow); 

    } 
+0

這不回答問題 – rhughes 2014-10-19 08:42:52

+0

也不是編譯。 – EJP 2014-10-19 08:44:04

+0

編輯沒有改進。當構造函數退出時,局部變量'ran'丟失。 – EJP 2014-10-19 08:45:33

0

使用setter方法來設置變量

public class Range{ 
static int low, high; 

public Range(int plow, int phigh){ 
    low = plow; 
    high = phigh; 
} 

public static int getLow(){ 
    return low; 
} 

public static int getHigh(){ 
    return high; 
} 

public static void setLow(int low) { 
    Range.low = low; 
} 

public static void setHigh(int high) { 
    Range.high = high; 
} 

,然後調用靜態方法來設置值或得到

public class Tree{ 
String name; 

public Tree(String pname, int plow, int phigh){ 
    name = pname; 
    Range.setHigh(phigh); //---where error message is 
    Range.setLow(plow); 
} 

}

+0

爲什麼'Range'的成員是靜態的? – EJP 2014-10-19 08:59:31

+0

只是爲了設置值而不啓動...如果它是非靜態方法..那麼我們必須創建Range的對象...並且執行相同的操作 – 2014-10-19 09:03:36

+0

那麼,您真正的答案是什麼? – EJP 2014-10-19 09:10:15

相關問題