2016-10-12 10 views
0

(0,0)からthis点までの距離を返し、距離法はthisからpまでの距離を返します。私は、Javaとジェネリッククラス/メソッドの初心者です。私の距離の方法にはエラーがありますが、私は正しい道にいると思います。 CharNumberのメソッドは、プライベートフィールドaCharの値を返し、数値に変換する必要があります。一般的なクラス/メソッドを使用した3点間の距離

public class Point <T extends Number> { 
    private T x; 
    private T y; 

    public Point(T x, T y){ 

    } 

    public T getX() { 
    return x; 
    } 

    public T getY() { 
    return y; 
    } 

    public double radius(){ 
    return Math.sqrt(
     Math.pow(x.doubleValue() - 0.0, 2) 
      + Math.pow(y.doubleValue() - 0.0,2)); 
    } 

    public double distance(Point p){ 
    return Math.sqrt(
     Math.pow(this.x.doubleValue() - p.getX(), 2) 
      + Math.pow(this.y.doubleValue() - p.getY(), 2)); 
    } 

    @Override 
    public String toString() { 
    return "Point{" 
     + "x=" + x 
     + ", y=" + y + "}"; 
    } 
} 

public class CharNumber extends java.lang.Number { 
    private char aChar; 

    public CharNumber(char c){// FIXME: 10/10/16 

    } 

    @Override 
    public String toString() { 
    return "CharNumber{" 
     + "aChar=" + aChar + "}"; 
    } 

    @Override 
    public int intValue() { 
    return 0; 
    } 

    @Override 
    public long longValue() { 
    return 0; 
    } 

    @Override 
    public float floatValue() { 
    return 0; 
    } 

    @Override 
    public double doubleValue() { 
    return 0; 
    } 
} 

UPDATED Pointクラス

public class Point <T extends Number> { 
private T x; 
private T y; 
public Point(T x, T y){ 
    this.x = x; 
    this.y = y; 

} 

public T getX() { 
    return x; 
} 

public T getY() { 
    return y; 
} 
public double radius(){ 
    return Math.sqrt(Math.pow(x.doubleValue()-0.0, 2)+Math.pow(y.doubleValue()-0.0,2)); 
} 

public double distance(Point<Number> p){ 
    return Math.sqrt(Math.pow(this.x.doubleValue() - p.getX().doubleValue(),2) 
      + Math.pow(this.y.doubleValue() - p.getY().doubleValue(),2)); 
} 

@Override 
public String toString() { 
    return "Point{" + 
      "x=" + x + 
      ", y=" + y + 
      '}'; 
} 
public static void main(String args[]){// FIXME: 10/10/16 
    Point<Integer> p = new Point<>(1,1); 
    Point<Double> p2 = new Point<>(2.5,3.4); 
    Point<CharNumber> p3 = new Point(5,6); 


    System.out.println(p); 
    System.out.println(p2); 
    System.out.println(p3); 
} 

} 私は私の主な方法での距離と半径方法どのように呼ぶのですか?

+1

'p.getX()。doubleValue()'と 'p.getY()。doubleValue()'を使います。 – msandiford

+0

this.x.doubleValue() - p.getX()、2? – Rawsick

+0

'p.getX()'を使う代わりに 'p.getX()。doubleValue()'を使う必要があります。 Y値についても同様です。 – msandiford

答えて

3

コンストラクタは、フィールドに割り当てる必要があります。

private final T x; 
private final T y; 

public Point(T x, T y) { 
    this.x = x; 
    this.y = y; 
} 

そして

private final char aChar; 

public CharNumber(char c) { 
    aChar = c; 
} 

とコメントとして:

public <U extends Number> double distance(Point<U> p) { 
    return Math.sqrt(Math.pow(x.doubleValue() - p.getX().doubleValue(), 2) 
     + Math.pow(y.doubleValue() - p.getY().doubleValue(), 2)); 
} 

あるいは

public <U extends Number> double distance(Point<U> p) { 
    return Math.hypot(x.doubleValue() - p.x.doubleValue(), 
     y.doubleValue() - p.y.doubleValue()); 
} 

Pointクラスが不変である場合、その座標、そしてフィールドを変更することはできません最終的にすることができます。これにより、変数を互いに割り当てることができます(ポイント値を共有する)。

Pointパラメータも一般的に入力する必要があります。

そこにはいくつかのことがありますが、あなたはそれを知っています。

+0

あなたの答えは最初のものだけでした。私は私のコメントを削除します。 – Makoto

+0

変数を確定する必要があるかどうかわかりません...最終決定する必要はありますか?また、Integer値を持つPointを作成するmainを作成することになっています.1つはDouble値、もう1つはCharNumber値です。次に、私が作成した3点からtoStringの戻り値と半径からの戻り値を出力します。 – Rawsick

+0

translate/moveのようなフィールドを変更するメソッドがない限り、それは良いでしょう。しかし、私はコースで強調されていないときに、「最終的な」ままにしておきます。 –