我在尝试将Dart网站上的Point程序转换为Java时遇到了一些问题。 Dart程序显示如下:
class Point {
num x, y;
Point(num this.x, num this.y);
Point scale(num factor) => new Point(x*factor, y*factor);
num distance() => Math.sqrt(x*x + y*y);
}
void main() {
Point a = new Point(2,3).scale(10);
print(a.distance());
}
这是我到目前为止所提出的:
public class PointJava {
int x, y;
public PointJava(int x, int y){
int a = x;
int b = y;
}
public PointJava scale(int factor){
PointJava j = new PointJava(factor*x, factor*y);
return j;
}
public double distance(){
double result = Math.sqrt(x*x+y*y);
return result;
}
public static void main(String[] args) {
PointJava a = new PointJava(2, 3).scale(10);
System.out.println(a.distance());
}
}
它输出双重型号0.0
,但Dart中的Point程序输出36.05551275463989
。
主要问题是尝试将这些语句转换为Java:
Point scale(num factor) => new Point(x*factor, y*factor);
num distance() => Math.sqrt(x*x + y*y);
我在C ++中看到过这种类型的语法,至少我实际上对它的研究很少(当我被引入指针和引用时,我停止了)。但是,我问别人,他们告诉我这些陈述实际上是用来定义功能的。我在这里看看这个人是否正确,以及如何理解这些陈述对Java的意义。
任何援助都会有所帮助。感谢。
答案 0 :(得分:3)
您的构造函数应如下所示:
public PointJava(int x, int y){
this.x = x;
this.y = y;
}
此外,您应该使用float
或double
代替int
。
this
关键字指的是当前对象。 this.x
是一个名为x
的类变量,属于对象this
。这不是一个全球性的。但是,由于您接受名为x
的参数,因此必须使用this
关键字区分这两个参数。如果你改变你所谓的传递参数,你可以避免使用关键字(虽然没有合理的理由这样做):
public PointJava(int newX, int newY){
x = newX;
y = newY;
}
答案 1 :(得分:1)
问题在于你的构造函数:它应该是
public PointJava(int x, int y) {
this.x = x;
this.y = y;
}