ちょっと間違った点を指摘しようと思っていただけだったんですけど、あまりにも多すぎて結局全て直してしまいました。。
間違っていたコードはなるべく消さずコメントアウトしたので、比較しながら読んでください。
Rep1.java
java
1class Point2D{
2 private double x;
3 private double y;
4
5 Point2D(double x, double y) {
6 this.x = x;
7 this.y = y;
8 }
9 public void setXY(double px,double py){ //double 型の引数を2つとり、座標を設定
10 // x = px;
11 // y = py;
12 // なくてもいいっちゃいいけど、thisつけたほうがいいのでは...?
13 this.x = px;
14 this.y = py;
15 }
16 public double getX(){
17 return this.x;
18 }
19 public double getY(){
20 return this.y;
21 }
22
23 public double getDist(){ //原点から自分の点までの距離を算出
24 // double d1 = Math.sqrt(x*x+y*y); <- わざわざd1にする必要ありません。
25 double d = Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2));
26 return d;
27 // 一気にreturn Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2));でもいい。
28 }
29 // double getDist(Point2D a,Point2D b){ //自分の点と引数の点間の距離を算出
30 public double getDist(Point2D p){ // 引数は相手の点だけでいいです。
31 // double d = Math.sqrt(x*x+y*y);
32 double d = Math.sqrt(Math.pow(this.x-p.x,2)+Math.pow(this.y-p.y,2));
33 // return d2; <- わざわざd2にする必要ありません。
34 return d;
35 }
36
37 /*
38 public void show(){ //自分の点の座標を表示
39 // System.out.printf("(%f,%f)\n",x,y);
40 System.out.printf("(%f,%f)\n",this.x,this.y);
41 }
42 これだと下のような使い方(文字列としての利用)はできない。
43 */
44 public String show(){ //自分の点の座標を表示
45 return "(" + this.x + "," + this.y + ")";
46 }
47}
48
49class TriangleArea {
50 private Point2D a;
51 private Point2D b;
52
53 // コンストラクタ書いてください。。。
54 TriangleArea(Point2D a,Point2D b){
55 this.a = a;
56 this.b = b;
57 }
58
59 public double getArea(){ //3角形の面積を求める
60 /* これはベクトル計算から証明される面積ですよね。。?
61 double tmp = (px1 * py2 - py1 * py2); -> Math.abs(px1 * py2 - px2 * py1)って書きたかった?
62 double z = tmp / 2;
63 return z;
64 確かに面積は(絶対値をつければ)出ますがヘロンの公式ではありません。
65 */
66 /* ヘロンの公式にちなみコードを変更。
67 S = sqrt(s*(s-l)*(s-m)*(s-n))
68 ただしs = (l+m+n)/2
69 wikiぐらい読んでください。
70 */
71 double l = a.getDist(); // 辺OA
72 double m = b.getDist(); // 辺OB
73 double n = a.getDist(b); // 辺AB
74 double s = (l+m+n)/2;
75
76 return Math.sqrt(s*(s-l)*(s-m)*(s-n));
77 }
78}
79
80public class Rep1{
81 public static void main(String[] args) {
82 // Double[] num = new double[4]; <- 配列なの?インスタンスなの???
83 double num[] = new double[4];
84 for (int i = 0; i < 4; i++) {
85 num[i] = Double.parseDouble(args[i]);
86 }
87
88 Point2D p1 = new Point2D(num[0],num[1]);
89 // num[]定義したのになんでわざわざ...?しかも引数の渡し方がおかしい。。
90 // p1.setXY(Double.parseDouble(args[0]));
91 // p1.setXY(Double.parseDouble(args[1]));
92 // 書くならp1.setXY(num[0],num[1]); ただし今回はコンストラクタで定義
93
94 // double px1 = p1.getXY(); getX,getYが定義されていませんでしたので、上記に追加しました。
95 // double py1 = p1.getXY();
96 double px1 = p1.getX();double py1 = p1.getY(); // ただ今回px1,py1,使ってないみたいですね。。
97
98 Point2D p2 = new Point2D(num[2],num[3]);
99 // p2.setXY(Double.parseDouble(args[2]));
100 // p2.setXY(Double.parseDouble(args[3]));
101 // 書くならp2.setXY(num[2],num[3]);
102
103 // double px2 = p2.getXY();
104 // double py2 = p2.getXY();
105 double px2 = p2.getX();double py2 = p2.getY(); // 同上。px2,py2は使ってないのでこの行は不要
106
107 // System.out.println("点aは"+p1.show(p1.x,p1.y)); <- 引数いらなくない。。?
108 System.out.println("点aは"+p1.show());
109 // System.out.println("原点からの距離は" + p1.getDist(p1.x,p1.y) + "です"); <- だから引数いらないってば。。(今回は原点でしょーが)
110 System.out.println("原点からの距離は" + p1.getDist() + "です\n"); // 見やすいように改行入れました。
111
112 // System.out.println("点bは"+p2.show(p2.x,p2.y));
113 System.out.println("点bは"+p2.show());
114 // System.out.println("原点からの距離は" + p2.getDist(p2.x,p2.y) + "です");
115 System.out.println("原点からの距離は" + p2.getDist() + "です\n"); // 見やすいように改行入れました。
116
117 // インスタンスメソッドとあるんだからこれもインスタンス化しなきゃダメじゃん。。
118 TriangleArea t = new TriangleArea(p1,p2);
119 System.out.println("三角形の面積は" + t.getArea() + "です");
120 }
121}
入出力例
$ java Rep1 1 0 0 2
点aは(1.0,0.0)
原点からの距離は1.0です
点bは(0.0,2.0)
原点からの距離は2.0です
三角形の面積は1.0です
私自身あんまりJavaやったことないので少し不安かも。。(^ ^;
というかクラス名から察するにこれ宿題ですよね?
私は気にしませんがteratail的にこういうのはまずかったはずなので、(質問者様にその気はなくとも)あんまり丸投げのような質問はするべきではないです。気をつけてください。
また仮に宿題等だとしても、修正欄にもあるようにエラー内容だけでなくエラーメッセージも載せると丁寧でピンポイントな回答が得られると思います。
こんなことが起きてしまったのはおそらく「一気に作った」からだと思います。
よく意味も理解していないうちに次の部分をどんどん作るのではなく、少しづつ作って行くべきです。
そうすればコンパイルエラーの意味もわかるようになるはずです。
もう少し小さなところから始めましょう。