2014-10-19 66 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

相关问题