2012-01-30 5 views
0

Dart WebサイトのPointプログラムをJavaに変換しようとすると、いくつか問題が発生しています。ダートプログラムは、下に表示されます。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()); 
} 

} 

それはdouble型の数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; 
} 

また、あなたがintの代わりにfloatまたはdoubleを使用する必要があります。

thisキーワードは、現在のオブジェクトを参照します。 this.xは、オブジェクトthisに属するクラス変数xです。それは本当にグローバルではありません。ただし、xという名前のパラメータを受け入れるため、thisキーワードを使用して2つのパラメータを区別する必要があります。あなたが渡されたパラメータと呼ぶものに変更する場合は、キーワードを使用して回避することができます(そうするための合理的な理由はありませんが):

public PointJava(int newX, int newY){ 
    x = newX; 
    y = newY; 
} 
+0

新しいコンストラクタコードを実装した後で動作しています。しかし、グローバル変数をintに変換してコンストラクタでdoubleに変換できるかどうかを確認したいと考えました。私はまれに "this"キーワードを使用することはほとんどありませんが、コンストラクタでそのキーワードを使用すると、そこで使用するためのメソッドで以前に定義されたグローバル変数を呼び出すようです。それを助けてくれれば幸いです。 – Rxanadu

+0

もう一度お手伝いしてくれてありがとう。あなたの説明は私には意味があります。これは、コード例の多くの説明についてオンラインで言える以上のものです。私はまた、 "メソッドの外の整数"(あなたが実際にグローバルではないと言ったので、実際に何を呼び出すべきかわからない)と、コンストラクタのパラメータと同様の結果を得ました。私は、 "距離"メソッドがMath.sqrt()メソッド呼び出しによって整数をdouble型に簡単に変換できると仮定します。 – Rxanadu

+0

これらはクラス変数です(属性と呼ばれることもあります)。 'Math.sqrt()'は暗黙的にその整数パラメータをdoubleにキャストします。 – rotsch

1

問題は、あなたのコンストラクタである:それは

public PointJava(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 
する必要があります