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

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

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

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

Q&A

解決済

2回答

471閲覧

エラーが取れない理由がわからない

20216169

総合スコア1

Java

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

0グッド

0クリップ

投稿2022/06/09 01:01

円の円周と円の面積を求めるプログラムなのですが、mainクラス内の "Sub sub = new Sub();"の部分がエラーとれないので、解決策とできればその理由を教えていただきたいです。

public class 練習 {
public class Circle {
double circle; // 円周
double circleArea; // 円の面積
}
public class Sub {
public Circle calcCircle(int r) {
Circle cir = new Circle();
cir.circle = 2 * r * 3.14;
cir.circleArea = r * r * 3.14;
return cir;
}
}
public class Main {
public static void main(String[] args) {
Sub sub = new Sub();
Circle cir = sub.calcCircle(5);

System.out.println(cir.circle); System.out.println(cir.circleArea); } }

}

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

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

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

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

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

maisumakun

2022/06/09 01:02

どのようなエラーが出ているのですか?メッセージを「そのまま」ご提示ください。
20216169

2022/06/09 01:04

「アクセス可能な型 練習 のエンクロージング・インスタンスがありません。」です
guest

回答2

0

ベストアンサー

CircleとSubは練習クラスの中にある、インナークラスというものです。
インナークラスをnewするには外側のクラスのインスタンスが必要になるため、
まずは外側のクラスをnewする必要があります。

Java

1public class 練習 { 2 public static void main(String[] args) { 3 Sub sub = new 練習().new Sub(); 4 Circle cir = sub.calcCircle(5); 5 System.out.println(cir.circle); 6 System.out.println(cir.circleArea); 7 } 8 9 public class Circle { 10 double circle; // 円周 11 double circleArea; // 円の面積 12 } 13 14 public class Sub { 15 public Circle calcCircle(int r) { 16 Circle cir = new Circle(); 17 cir.circle = 2 * r * 3.14; 18 cir.circleArea = r * r * 3.14; 19 return cir; 20 } 21 } 22}

もしくは以下。
クラス定義にstaticを付ける。
こうすることで、インナークラスでも普通のクラスのように扱えるようになります。

Java

1public class 練習 { 2 public static void main(String[] args) { 3 Sub sub = new Sub(); 4 Circle cir = sub.calcCircle(5); 5 System.out.println(cir.circle); 6 System.out.println(cir.circleArea); 7 } 8 9 public static class Circle { 10 double circle; // 円周 11 double circleArea; // 円の面積 12 } 13 14 public static class Sub { 15 public Circle calcCircle(int r) { 16 Circle cir = new Circle(); 17 cir.circle = 2 * r * 3.14; 18 cir.circleArea = r * r * 3.14; 19 return cir; 20 } 21 } 22}

もしくは以下。
練習クラスの外に出す。publicなクラスは1つのファイルに1つしか定義できないため、
publicを外しましょう。

Java

1public class 練習 { 2 public static void main(String[] args) { 3 Sub sub = new Sub(); 4 Circle cir = sub.calcCircle(5); 5 System.out.println(cir.circle); 6 System.out.println(cir.circleArea); 7 } 8} 9 10class Circle { 11 double circle; // 円周 12 double circleArea; // 円の面積 13} 14 15class Sub { 16 public Circle calcCircle(int r) { 17 Circle cir = new Circle(); 18 cir.circle = 2 * r * 3.14; 19 cir.circleArea = r * r * 3.14; 20 return cir; 21 } 22}

投稿2022/06/09 01:13

root_jp

総合スコア4666

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

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

20216169

2022/06/09 01:26

わかりやすい解説ありがとうございます。理解できました!
guest

0

アクセス可能な型 練習 のエンクロージング・インスタンスがありません。

エラーメッセージのとおりです。

他のクラス内でstaticでないクラスを作成すると、外側のクラスのインスタンス(エンクロージング・インスタンス)と紐づいた特殊なクラスとなってしまいます。

あえてそのようなクラスを作りたい意思があるのでなければ、クラス内でクラスを作らず、バラバラなファイルでクラスを作成してください。

投稿2022/06/09 01:08

maisumakun

総合スコア145183

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

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

20216169

2022/06/09 01:26

わかりやすい解説ありがとうございます。理解できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問