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

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

ただいまの
回答率

90.52%

  • Java

    13760questions

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

Java "シンボルを見つけられません"となる。

解決済

回答 1

投稿

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

macok

score 4

 質問

Java初心者です。
Point,Rectangle,Circleの各面積の合計を計算し、出力するプログラムを書いていますが、次のようなエラーが出てしまい、うまくいきません。
どこが間違っているのでしょうか?

 エラーメッセージ

TestShape.java:19: エラー: シンボルを見つけられません
      System.out.println("Point"+ i+1 +"Area is " + obj[i].getArea());
                                                          ^
  シンボル:   メソッド getArea()
  場所: クラス Object
TestShape.java:20: エラー: シンボルを見つけられません
      sum += obj[i].getArea();
                   ^
  シンボル:   メソッド getArea()
  場所: クラス Object
TestShape.java:23: エラー: シンボルを見つけられません
      System.out.println("Circle"+ i+1 +"Area is " + obj[i].getArea());
                                                           ^
  シンボル:   メソッド getArea()
  場所: クラス Object
TestShape.java:24: エラー: シンボルを見つけられません
      sum += obj[i].getArea();
                   ^
  シンボル:   メソッド getArea()
  場所: クラス Object
TestShape.java:27: エラー: シンボルを見つけられません
      System.out.println("Rectangle"+ i+1 +"Area is " + obj[i].getArea());
                                                              ^
  シンボル:   メソッド getArea()
  場所: クラス Object
TestShape.java:28: エラー: シンボルを見つけられません
      sum += obj[i].getArea();
                   ^
  シンボル:   メソッド getArea()
  場所: クラス Object
エラー6

interface Shape {
   public double getArea();
}

public class Point implements Shape{
  int x;
  int y;
  Point(){
    x = 0;
    y = 0;
  }
  Point(int x, int y){
    this.x = x;
    this.y = y;
  }
  public double getArea(){
    return 0.0;
  }
}


public class Circle implements Shape{
  int x;
  int y;
  int r;
  Circle(){
    x = 0;
    y = 0;
    r = 0;
  }
  Circle(int x, int y, int r){
    this.x = x;
    this.y = y;
    this.r = r;
  }
  public double getArea(){
    return (r * r * Math.PI);
  }
}

public class Rectangle implements Shape{
  int x;
  int y;
  int h;
  int w;
  Rectangle(){
    x = 0;
    y = 0;
    h = 0;
    w = 0;
  }
  Rectangle(int x, int y, int h, int w){
    this.x = x;
    this.y = y;
    this.h = h;
    this.w = w;
  }
  public double getArea(){
    return (h * w);
  }
}


public class TestShape{
  public static void main(String[] args){
    Object[] obj = {
      new Point(1,1),
      new Point(2,5),
      new Point(3,7),
      new Circle(4,2,4),
      new Circle(2,3,5),
      new Circle(3,2,6),
      new Circle(5,5,5),
      new Rectangle(3,4,5,6),
      new Rectangle(2,3,4,5),
      new Rectangle(7,5,3,2),
      new Rectangle(2,3,4,5),
      new Rectangle(7,8,9,6),
    };

    double sum = 0.0;

    for(int i = 0; i < 3; i++){
      System.out.println("Point "+ (i+1) +" Area is " + obj[i].getArea());
      sum += obj[i].getArea();
    }
    for(int i = 3; i < 7; i++){
      System.out.println("Circle "+ (i+1) +" Area is " + obj[i].getArea());
      sum += obj[i].getArea();
    }
    for(int i = 7; i < 12; i++){
      System.out.println("Rectangle "+ (i+1) +" Area is " + obj[i].getArea());
      sum += obj[i].getArea();
    }
    System.out.println("The sum of area values is " + sum);
  }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

getAreaメソッドを定義しているのはあくまでShapeインターフェースです。
ですので、配列objの型はObject[]ではなくShape[]にすべきです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/05/27 00:24

    ご回答ありがとうございます。
    問題の条件にオブジェクトをObjectの配列に格納せよとあったので、Object[]という風にしていました。
    Shape[]にすべきということで、エラー箇所のobj[i]を((Shape)obj[i])としたところコンパイルは通りました。
    「これは、getAreaメソッドを定義しているのはあくまでShapeインターフェースであるからShapeにキャストしなければならなかった。」という解釈でよろしいでしょうか?

    キャンセル

  • 2018/05/27 00:48

    その解釈で問題ないです。
    それにしても、『オブジェクトをObjectの配列に格納せよ』とは、ずいぶん謎な制約ですね...

    キャンセル

  • 2018/05/27 10:35

    キャストさせたかったのかと思います。
    自分でもなぜわざわざObjectなのか不思議に思うところはあります...

    キャンセル

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

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

関連した質問

  • 受付中

    社員情報のプログラム

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

  • 解決済

    コンパイルがうまく行きません

    avac ShapeTester.java ShapeTester.java:8: エラー: シンボルを見つけられません         Shape [] a = new Sh

  • 解決済

    100になる直前の加算結果出力

    javaで開始値と終了値を入力してその間の偶数を加算していき、合計が100を超えたら「数値が100を超えたため、処理を中止します。」とメッセージを出し、かつ合計が100になる前の加

  • 解決済

    インスタンス化の際,参照変数をインターフェース型にする意味

    質問 Javaのインターフェースについて勉強中です。 以下コードの利点について知りたいです。 インターフェース 参照変数 = new インターフェースを実装したクラス()

  • 解決済

    Java リストの使いかたについて

    リストの中で1番面積が大きい図形を返す Javaのコードでmaxの中身が分かりません。  リストの使いかたがいまいち分からず、、、教えてください。 該当のソースコード p

  • 解決済

    以下のコードでエラーになる原因を教えて下さい。

    import java.util.*; public class Main { public static void main(String[] args) { Sc

  • 解決済

    javaについて

    javaについて質問です。情報処理検定第53回のプログラミング部門1級のjavaの問題をやっているんですけど、そのjavaに平均値を追加したいです。どのように追加すれば良いのでしょ

  • 解決済

    テスト点などの得点率を計算し表示する方法

    前提・実現したいこと Java8で配列の勉強のために得点等を計算するシステムを作っています。 合計点、平均点、得点率を表示する機能を実装中に以下の問題が発生しました。 発

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

  • Java

    13760questions

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