2011-03-09 38 views
0
public MyLine(double x, double y) 
{ 

    MyLine p1 = new MyLine(); 

    p1.x = x; 

    p1.y = y; 

} 

这是我的代码这是怎么回事?找不到标志。符号 - 构造

,我得到的错误是

./MyLine.java:12: cannot find symbol 

symbol : constructor MyLine() 

location: class MyLine 

MyLine p1 = new MyLine(); 
+0

@posdef,无关紧要的问题。查看错误日志。 – 2011-03-09 10:00:08

+0

似乎没有给予足够的重视,我删除了评论,不会造成任何进一步的混乱。感谢您指出。 – posdef 2011-03-09 10:01:01

+1

@posdef现在旁路器被意见搞糊涂了,指的是已经消失的东西:) – Dunaril 2011-03-09 10:07:23

回答

0

这条线:

MyLine p1 = new MyLine(); 

应该被删除。这是创建一个新的实例,你实际上想要与你正在创建的实例一起工作(因为你在构造函数中。)你会得到这个错误,因为你从这行中调用一个不存在的构造函数,但不管怎样,你都不想这样做。

您可以使用this关键字来引用当前实例(如果这些字段与参数名称相同,在这种情况下看起来像是这样,您需要执行此操作。)

所以考虑到这一点,你最终有以下:

public MyLine(double x, double y) { 
    this.x = x; 
    this.y = y; 
} 
7

不要实例化它的构造函数中。刚分配:

this.x = x; 
this.y = y; 

错误告诉你,你不会有一个无参数的构造函数,但是即使你有,该行为不会如您所愿

+0

到目前为止的相关答案。 – 2011-03-09 10:01:01

1

提供默认的构造函数 即是添加

public MyLine(){} 

,它不有道理要创建本地对象的构造和分配值是..

改用

this.x=x; 

this.y=y; 
0

你构建内部似乎是MYLINE的构造MYLINE的一个实例。所以你写的构造函数的调用者将会分配两个对象。那是你要的吗?

6

错误消息告诉您在MyLine类中没有无参数构造函数。

您可以创建一个让代码编译。

但是它看起来像你试图在MyLine构造函数中实例化一个MyLine对象。你几乎肯定不想这样做。

相反,你要采取作为参数传递的值并初始化与他们当前对象的字段:

public MyLine(double x, double y) 
{ 
    this.x = x; 
    this.y = y; 
} 
0

你真的要建立一个新的MYLINE对象而构建另一个MYLINE对象?

你真的要做到:

public MyLine(double x, double y) 
    { 

    this(); 

    this.x = x; 

    this.y = y; 

} 
+0

其中this()实际上是隐含的,所以你可能会错过它......为清晰起见在此添加 – katsharp 2011-03-09 10:01:39

0

你真的不应该实例化等内部构造一个新的MYLINE。为什么不能简单地做:

public class MyLine { 

    private double slope; 
    private double constant; 

    // creates a new line: f(x) -> m*x + b 
    public MyLine(double m, double b) { 
    this.slope = m; 
    this.constant = b; 
    } 

    // ... 
} 
0

的问题是,一旦你自己创建一个构造函数,像public MyLine(double x, double y)编译器将不添加public MyLine()默认构造函数自动。

如果你想使这个工厂方法,你应该返回p1,也许使它静态。