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

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

ただいまの
回答率

90.86%

  • Java

    12806questions

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

staticでない変数 thisをstaticコンテキストから参照することはできません

解決済

回答 2

投稿 編集

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

lizliz

score 1

 前提・実現したいこと

四角形の大きさと円の半径を表示し、面積を出力したい。

 発生している問題・エラーメッセージ

My.java:41: エラー: staticでない変数 thisstaticコンテキストから参照することはできません
        Rectangle r = new Rectangle();
                      ^
My.java:42: エラー: シンボルを見つけられません
        r.width = 10;
         ^
  シンボル:   変数 width
  場所: タイプMy.Rectangleの変数 r
My.java:43: エラー: シンボルを見つけられません
        r.height = 20;
         ^
  シンボル:   変数 height
  場所: タイプMy.Rectangleの変数 r
My.java:44: エラー: シンボルを見つけられません
        System.out.println("r.width = "+r.width);
                                         ^
  シンボル:   変数 width
  場所: タイプMy.Rectangleの変数 r
My.java:45: エラー: シンボルを見つけられません
        System.out.println("r.hight ="+r.height);
                                        ^
  シンボル:   変数 height
  場所: タイプMy.Rectangleの変数 r
My.java:48: エラー: staticでない変数 thisstaticコンテキストから参照することはできません
        Circle c = new Circle();
                   ^
My.java:50: エラー: シンボルを見つけられません
        System.out.println("c.radius = " + c.radius);
                                            ^
  シンボル:   変数 radius
  場所: タイプMy.Circleの変数 c

 該当のソースコード

public class My{

    int radius;
    int width;
    int height;

    public class Rectangle{

        Rectangle(int w, int h){
            setSize(w,h);
        }

        void setSize(int w, int h) {
        width = w;
        height = h;
        }

        int getArea() {
        return width * height;
        } 
    }  

    public class Circle{

        Circle(int r){
            setRadius(r);
        }

        void setRadius(int r){
            radius = r;
        }
        double getCiArea(){
            return 3.14 * radius * radius;

        }        
    }

    public static void main(String[] args){
        Rectangle r = new Rectangle();
        r.width = 10;
        r.height = 20;
        System.out.println("r.width = "+r.width);
        System.out.println("r.hight ="+r.height);
        System.out.println("r.getArea = "+r.getArea());

        Circle c = new Circle();
        c.setRadius(10);
        System.out.println("c.radius = " + c.radius);
        System.out.println("c.getArea() = " + c.getCiArea()); 
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • mts10806

    2018/05/19 18:20

    質問テンプレート部分の文言が多く残っています。本件と関係のない部分は除去してください。回答する上でのノイズとなります。

    キャンセル

  • mts10806

    2018/05/19 20:46

    LouiS0616さんが回答で指摘されているコード部分についてもコードを見やすくしたり、回答者の再現確認の手助けとなるものなので、お手数ですが調整願います。

    キャンセル

回答 2

+2

Rectangleを内部クラスにしているからですね。
解決法はいくつかありますが、素直にRectangle.javaを作ってそちらに移行するのが良いかと。
Circleクラスも同様です。

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
Java

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

-1

問題の趣旨とは異なるかもしれませんが、以下のコードで長方形、円の面積を算出することができます。

public class Main{ 
    public static void main(String[] args){
        Rectangle r = new Rectangle(10,20);
        Circle c = new Circle(5);
        r.print_result();
        c.print_result();
    }

}

class Rectangle{
    private int Width;
    private int Height;

    public Rectangle(int width, int height){
        Width = width;
        Height = height;
    }
    public void print_result(){
        int area = Width * Height;
        System.out.println("width = " + Width);
        System.out.println("height = " + Height);
        System.out.println("area = " + area);
    }
}

class Circle{
    private int Radius;

    public Circle(int radius){
        Radius = radius;
    }
    public void print_result(){
        double area = Radius * Radius * Math.PI;
        System.out.println("radius = " + Radius);
        System.out.println("area = " + area);
    }
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

  • 受付中

    明解Java入門編演習9−3

    この演習はDayクラスを使わずに行う演習なのでしょうか? Dayクラスを使うのなら、銀行口座クラスにtoStringメソッドを作る理由が分かりません。 また、もしDayクラスを

  • 解決済

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

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

  • 解決済

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

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

  • 解決済

    javaで最大公約数と最小公倍数

    javaで最大公約数と最大公約数と最小公倍数最小公倍数を求めるプログラムをwhileとm*n/gcdを使って書いたのですが,こんなエラーが出ました。 gcd.java:11:

  • 解決済

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

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

  • 解決済

    入力した値を表示させない方法

    初めまして。現在JAVAを学んでいる初心者です。 現在、配列に格納している値を表示させるプログラムを作っています。 ユーザーから入力があった場合、次に配列の値を表示させるとき、

  • 解決済

    改行区切りでの出力

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

  • 解決済

    javaの配列に文字を格納して処理する方法

     疑問、質問 javaについての質問です。 キーボードから文字を一字ずつ入力し配列に格納する。 その後配列に格納されていた文字によってそれぞれ順番に処理していくというプログラ

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

  • Java

    12806questions

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