質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

1706閲覧

ヘロンの公式を用いて三角形の面積を求める。

nemuichan

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/11/18 07:19

###前提・実現したいこと
2次元空間上の点のクラス Point2D
Point2D のインスタンス 2点 a と b, 及び原点からなる3角形のクラス Triangle を作成する。
Triangle クラス内にa、b 及び原点の3点からなる3角形の面積を求める インスタンスメソッド double getArea( )を作成する。
コマンド引数に4つの実数値を与え、三角形の面積を求める。

class Point2D{ private double x; private double y; Point2D(double x, double y) { this.x = x; this.y = y; } void setXY(double px,double py){ //double 型の引数を2つとり、座標を設定 x = px; y = py; } double getDist(){ //原点から自分の点までの距離を算出 double d1 = Math.sqrt(x*x+y*y); return d1; } double getDist(Point2D a,Point2D b){ //自分の点と引数の点間の距離を算出 double d = Math.sqrt(x*x+y*y); return d2; } void show(){ //自分の点の座標を表示 System.out.printf("(%f,%f)\n",x,y); } } class TriangleArea { private Point2D a; private Point2D b; double getArea(){ //3角形の面積を求める double tmp = (px1 * py2 - py1 * py2); double z = tmp / 2; return z; } } class Rep1{ public static void main(String[] args) { Double[] num = new double[4]; for (int i = 0; i < 4; i++) { num[i] = Double.parseDouble(args[i]); } Point2D p1 = new Point2D(); p1.setXY(Double.parseDouble(args[0])); p1.setXY(Double.parseDouble(args[1])); double px1 = p1.getXY(); double py1 = p1.getXY(); Point2D p2 = new Point2D(); p2.setXY(Double.parseDouble(args[2])); p2.setXY(Double.parseDouble(args[3])); double px2 = p2.getXY(); double py2 = p2.getXY(); System.out.println("点aは"+p1.show(p1.x,p1.y)); System.out.println("原点からの距離は" + p1.getDist(p1.x,p1.y) + "です"); System.out.println("点bは"+p2.show(p2.x,p2.y)); System.out.println("原点からの距離は" + p2.getDist(p2.x,p2.y) + "です"); System.out.println("三角形の面積は" + getArea() + "です"); } }

コンパイルをするとシンボルが見つからないをでて、どこを修正すれば良いのかわからない状態です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/11/18 07:51

「シンボルが見つからない」ではなく、最低限出力されたエラーメッセージそのものと、そこに書かれている行番号がソースコードのどの行にあたるかのコメントを質問文に明記してください。参考「https://teratail.com/help/question-tips」。そこにはこう書かれてます:エラーメッセージや実行ログをコピー&ペーストしましょう 問題が起きた時にエラーメッセージが表示されることがあります。エラーメッセージには重要な情報が多く書かれています。初心者にはエラーメッセージが意味していることがよくわからない場合がありますが、熟練した人にはエラーメッセージを見るだけで他の情報を何も見なくても問題解決の方法が分かる場合があります。 それほど大きなヒントになるのです。
kentei_syunrai

2017/11/18 13:01 編集

コンストラクタに引数が渡せていないなど、基本的な部分に誤りがあるようです。見直してください。あとコマンドで渡す4つの値は何でしょうか? x1,y1,x2,y2であってます? ヘロンということは3つの辺の長さかなとも思ったのですが、ソースの感じをみるとそうでもなさそうなので。
guest

回答2

0

Java

1 double getDist(Point2D a,Point2D b){ //自分の点と引数の点間の距離を算出 2 double d = Math.sqrt(x*x+y*y); 3 return d2; 4 }

d2なんてないですよね。

Java

1 double getArea(){ //3角形の面積を求める 2 double tmp = (px1 * py2 - py1 * py2); 3 double z = tmp / 2; 4 return z; 5 }

px1 py1 px2 py2なんて無いですよね

きっとコンパイルした際

Java

1Rep1.java:31: エラー: シンボルを見つけられません 2 double tmp = (px1 * py2 - py1 * py2); 3 ^ 4 シンボル: 変数 px1 5 場所: クラス TriangleArea

というように出力されてるはずですので、エラー内容がシンボルってでてきても落ち着いてちゃんと変数があるかをチェックしてなければなぜ無いものを使おうとしてるのかを考えていけばきっと解決します。

投稿2017/11/18 14:46

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2017/11/18 19:52

「どこを直せばいいかわからない」という人に限って、そのままの答えを出しているエラーメッセージをスルーする傾向にありますよね…
rururu3

2017/11/20 02:06

課題からして触り始めでしょうからエラー出たらわからんってなるのはわかります。が、この段階で調べて直せる直せないが最初の壁???なのかもしれませんね。
guest

0

ちょっと間違った点を指摘しようと思っていただけだったんですけど、あまりにも多すぎて結局全て直してしまいました。。

間違っていたコードはなるべく消さずコメントアウトしたので、比較しながら読んでください。

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的にこういうのはまずかったはずなので、(質問者様にその気はなくとも)あんまり丸投げのような質問はするべきではないです。気をつけてください。
また仮に宿題等だとしても、修正欄にもあるようにエラー内容だけでなくエラーメッセージも載せると丁寧でピンポイントな回答が得られると思います。


こんなことが起きてしまったのはおそらく「一気に作った」からだと思います。

よく意味も理解していないうちに次の部分をどんどん作るのではなく、少しづつ作って行くべきです。
そうすればコンパイルエラーの意味もわかるようになるはずです。

もう少し小さなところから始めましょう。

投稿2017/11/18 16:05

編集2017/11/19 03:33
namnium1125

総合スコア2043

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2017/11/18 17:08

コピペして満足されちゃったらどうしようもないので、 nemuichanさんが向学心溢れる学生であることを切に願います。。。
namnium1125

2017/11/18 17:25 編集

そうですね。。ちょっと全コード載せたのは軽率な行為だったかもしれません。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問