2012-01-30 3 views
0

У меня возникло несколько вопросов, пытающихся преобразовать программу Point на сайт Dart в Java. Программа Dart отображается ниже:Попытка конвертировать программу Dart в Java

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, но программа Точки в Дарте выводит 36.05551275463989.

Основная проблема пытается преобразовать эти заявления в Java:

Point scale(num factor) => new Point(x*factor, y*factor); 
num distance() => Math.sqrt(x*x + y*y); 

Я видел этот тип синтаксиса в C++, по крайней мере то, что мало я на самом деле изучал его (я остановился, когда я был введен в указатели и ссылки). Однако я спросил кого-то еще, и они сказали мне, что эти утверждения фактически использовались для определения функций. Я здесь, чтобы понять, правильно ли этот человек и как понять, что означают эти выражения в терминах Java.

Любая помощь поможет. Благодарю.

ответ

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; 
} 
+0

Теперь он работает после внедрения нового кода конструктора. Тем не менее, я хотел посмотреть, могу ли я преобразовать глобальные переменные в int и преобразовать их в double в конструкторе. Я также редко использую «это» ключевое слово, но из его использования в конструкторе он, как представляется, вызывает ранее определенную глобальную переменную в методе для ее использования. Любая помощь с этим будет высоко оценена. – Rxanadu

+0

Еще раз спасибо за помощь. Ваше объяснение имеет смысл для меня, что больше, чем я могу сказать о многих объяснениях примеров кода в Интернете. Я также использовал int в «целых числах вне методов» (не знаю, как их действительно назвать, поскольку вы заявили, что они не были глобальными), а также параметры в конструкторе, и я получил тот же результат , Я предполагаю, что метод «distance» смог легко преобразовать целые числа в двойные части с помощью вызова метода Math.sqrt(). – Rxanadu

+0

Это переменные класса (иногда называемые атрибутами), вы можете их так назвать. 'Math.sqrt()' неявно отбрасывает свой целочисленный параметр в double. – rotsch

1

Проблема заключается в конструкторе: он должен быть

public PointJava(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 
Смежные вопросы