试图将Dart程序转换为Java

时间:2012-01-30 19:19:35

标签: java function

我在尝试将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的意义。

任何援助都会有所帮助。感谢。

2 个答案:

答案 0 :(得分:3)

您的构造函数应如下所示:

public PointJava(int x, int y){
    this.x = x;
    this.y = y;
}

此外,您应该使用floatdouble代替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;
}