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

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

ただいまの
回答率

90.49%

  • Java

    13819questions

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

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

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 607

nemuichan

score 2

前提・実現したいこと

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() + "です");
  }
}

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • KSwordOfHaste

    2017/11/18 16:51

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

    キャンセル

  • kentei_syunrai

    2017/11/18 21:53 編集

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

    キャンセル

回答 2

+5

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


d2なんてないですよね。

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


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

きっとコンパイルした際

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/19 04:52

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

    キャンセル

  • 2017/11/20 11:06

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

    キャンセル

+4

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

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

Rep1.java

class Point2D{
  private double x;
  private double y;

  Point2D(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void setXY(double px,double py){  //double 型の引数を2つとり、座標を設定
    // x = px;
    // y = py;
    // なくてもいいっちゃいいけど、thisつけたほうがいいのでは...?
    this.x = px;
    this.y = py;
  }
  public double getX(){
    return this.x;
  }
  public double getY(){
    return this.y;
  }

  public double getDist(){  //原点から自分の点までの距離を算出
    // double d1 = Math.sqrt(x*x+y*y); <- わざわざd1にする必要ありません。
    double d = Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2));
    return d;
    // 一気にreturn Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2));でもいい。
  }
 // double getDist(Point2D a,Point2D b){  //自分の点と引数の点間の距離を算出
  public double getDist(Point2D p){  // 引数は相手の点だけでいいです。
    // double d = Math.sqrt(x*x+y*y);
    double d = Math.sqrt(Math.pow(this.x-p.x,2)+Math.pow(this.y-p.y,2));
    // return d2;  <- わざわざd2にする必要ありません。
    return d;
  }

  /*
  public void show(){  //自分の点の座標を表示
    // System.out.printf("(%f,%f)\n",x,y);
    System.out.printf("(%f,%f)\n",this.x,this.y);
  }
  これだと下のような使い方(文字列としての利用)はできない。
  */
  public String show(){  //自分の点の座標を表示
    return "(" + this.x + "," + this.y + ")";
  }
}

class TriangleArea {
    private Point2D a;
    private Point2D b;

    // コンストラクタ書いてください。。。
    TriangleArea(Point2D a,Point2D b){
      this.a = a;
      this.b = b;
    }

    public double getArea(){  //3角形の面積を求める
      /* これはベクトル計算から証明される面積ですよね。。?
      double tmp = (px1 * py2 - py1 * py2); -> Math.abs(px1 * py2 - px2 * py1)って書きたかった?
      double z = tmp / 2;
      return z;
        確かに面積は(絶対値をつければ)出ますがヘロンの公式ではありません。
      */
      /* ヘロンの公式にちなみコードを変更。
        S = sqrt(s*(s-l)*(s-m)*(s-n))
        ただしs = (l+m+n)/2
        wikiぐらい読んでください。
      */
      double l = a.getDist(); // 辺OA
      double m = b.getDist(); // 辺OB
      double n = a.getDist(b); // 辺AB
      double s = (l+m+n)/2;

      return Math.sqrt(s*(s-l)*(s-m)*(s-n));
    }
}

public class Rep1{
  public static void main(String[] args) {
    // Double[] num = new double[4]; <- 配列なの?インスタンスなの???
    double num[] = new double[4];
    for (int i = 0; i < 4; i++) {
      num[i] = Double.parseDouble(args[i]);
    }

    Point2D p1 = new Point2D(num[0],num[1]);
    // num[]定義したのになんでわざわざ...?しかも引数の渡し方がおかしい。。
    // p1.setXY(Double.parseDouble(args[0]));
    // p1.setXY(Double.parseDouble(args[1]));
    // 書くならp1.setXY(num[0],num[1]); ただし今回はコンストラクタで定義

    // double px1 = p1.getXY(); getX,getYが定義されていませんでしたので、上記に追加しました。
    // double py1 = p1.getXY();
    double px1 = p1.getX();double py1 = p1.getY(); // ただ今回px1,py1,使ってないみたいですね。。

    Point2D p2 = new Point2D(num[2],num[3]);
    // p2.setXY(Double.parseDouble(args[2]));
    // p2.setXY(Double.parseDouble(args[3]));
    // 書くならp2.setXY(num[2],num[3]);

    // double px2 = p2.getXY();
    // double py2 = p2.getXY();
    double px2 = p2.getX();double py2 = p2.getY(); // 同上。px2,py2は使ってないのでこの行は不要

    // System.out.println("点aは"+p1.show(p1.x,p1.y)); <- 引数いらなくない。。?
    System.out.println("点aは"+p1.show());
    // System.out.println("原点からの距離は" + p1.getDist(p1.x,p1.y) + "です"); <- だから引数いらないってば。。(今回は原点でしょーが)
    System.out.println("原点からの距離は" + p1.getDist() + "です\n"); // 見やすいように改行入れました。

    // System.out.println("点bは"+p2.show(p2.x,p2.y));
    System.out.println("点bは"+p2.show());
    // System.out.println("原点からの距離は" + p2.getDist(p2.x,p2.y) + "です");
    System.out.println("原点からの距離は" + p2.getDist() + "です\n"); // 見やすいように改行入れました。

    // インスタンスメソッドとあるんだからこれもインスタンス化しなきゃダメじゃん。。
    TriangleArea t = new TriangleArea(p1,p2);
    System.out.println("三角形の面積は" + t.getArea() + "です");
  }
}

入出力例

$ 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/19 02:08

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

    キャンセル

  • 2017/11/19 02:24 編集

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

    キャンセル

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    社員情報のプログラム

    社員情報のプログラム (JAVA) プログラの機能 (1)社員情報の追加 入力項目としては、社員番号、氏名(性、名)、生年月日(年、月、日) (3)で読み込んだ情報を追加する仕

  • 解決済

    「シンボルを見つけられません」とエラーが出る

    BMI.javaをコンパイル時に 「シンボルを見つけられません」と表示されてしまします。 10行目の変数mが問題らしいのですが、色々変更してもエラーが直りません。 どうす

  • 解決済

    値の小数点第3位以下を四捨五入し、表示させる

    jspから受け取ってactionで計算したBMIの値を小数点第3位以下を四捨五入してjspで表示させたいのですが、 小数点云々のことは調べてもmath.roundなどSystem

  • 受付中

    オブ

    下記うお願いします。本質問に関係ない処理が記載されていますが気にしないでください。よ         Donut d1 = new Dc2);          Syste

  • 解決済

    javaでnumpyのcorrcoefを使いたい

    pythonにあるnumpyのcorrcoefをjavaで利用して下のような処理をしたいが 使う方法はありますか? color =np.mean(np.corrcoef(np.

  • 解決済

    改行区切りでの出力

    ランダムな整数を改行区切りで3個出力したくて以下のコードを打ってみたんですが間違いといわれました。どこが違うのか指摘お願いします  public class Main {  p

  • 解決済

    double型の範囲について

    前提・実現したいこと 毎度お世話になっております。グラフで曲線を描きたいと思っております。 結果を格納する変数にdouble型を用いているのですが、途中から値がおかしくなります

  • 解決済

    java キーボード入力を用いた計算プログラム

    概要 キーボードから入力したテストの結果から、合計・平均・順位(バブルソート)分散・標準偏差を導出するプログラムを作っています。 具体的には 生徒数を入力 ↓ 生徒数の応じた点数を

同じタグがついた質問を見る

  • Java

    13819questions

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