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

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

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

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

Q&A

解決済

4回答

907閲覧

【Java】「名前は、ポチです。」を出力させたい

ypk

総合スコア80

Java

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

0グッド

0クリップ

投稿2020/05/16 12:27

初めまして。
セッターを利用して「名前は、ポチです。」を出力させたいと考えていますが、エラーが発生してしまいます。
私の実力では、どこに誤りがあるのかわかりません。
もし何か、気になる箇所などございましたらご教授いただければと思います。
どうぞよろしくお願いいたします。

#私のコード

Java

1public class Main { 2 3 public static void main(String args[]) { 4 5 Dog dog = new dog(); 6 dog.SetName("ポチ"); 7 8 } 9 10 class Dog { 11 12 private String Name; 13 14 public void SetName(String nm) { 15 Name = nm; 16 } 17 18 public void ShowProfile() { 19 System.out.println("名前は、" + Name + "です。"); 20 } 21 } 22 23} 24

#エラー

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

dog cannot be resolved to a type at Main.main(Main.java:6)

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

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

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

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

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

m.ts10806

2020/05/16 12:39 編集

VSCodeは構文チェック働かないんでしょうか。 環境きちんと整えられた方が良いのでは。(せっかく前の質問の回答でヒント出したのに・・・)
m.ts10806

2020/05/16 12:40

VSCodeでもその手のチェックをしてくれるプラグインはありそうなものですが・・・
m.ts10806

2020/05/16 12:44

というか、Mainクラス内にDogクラスを定義してるわけですか。
ypk

2020/05/16 12:45

すみません、、、エラーが出力されるだけですね、、、デバックはできます。(もしかして、構文チェックとはデバックのことでしょうか) VSコードは手順通り設定したのと、一応ソースコードの構文があっているときはちゃんと出力がなされるのでおそらく私が適切にコードの記述ができていないためにエラーが発生しているものと考えています。
ypk

2020/05/16 12:47

>というか、Mainクラス内にDogクラスを定義してるわけですか。 なるほど、、、、まだまだJavaに対する理解が未熟で、気づけませんでした。毎度毎度、勉強になります。ありがとうございます。
ypk

2020/05/16 12:48

ちなみになのですが、Mainクラス内にDogクラスを定義するとなぜ問題が発生してしまうのでしょうか??
m.ts10806

2020/05/16 12:48

構文チェックとデバッグは別です。(デバッ「グ」ですdebug) 構文チェックはそもそもJavaの構文にあわせてコードが書かれているかを確認するもので デバッグはプログラムが想定の動作をしないときに分岐や保持している情報を確認して原因究明をしていく作業のことです
m.ts10806

2020/05/16 12:50

「なぜインナークラスにしたか」というところを詰める必要があります。 使えないわけではないですが、理由なしに使って有効活用できるものではないです(私はインナークラスほとんど使いません)
ypk

2020/05/16 12:53

ご丁寧にありがとうございます。 「インナークラス」という概念自体、初めて知りました、、、 ありがとうございます。大変勉強になりました。
gentaro

2020/05/16 12:56

https://teratail.com/questions/261848#reply-375862 > 以後、このような初歩的なミスに気を付けて参ります。ありがとうございました。 今回の「Dog」と「dog」は以前の質問と同じような間違いですが、もうちょっと慎重に一字一句確認できませんか? あとどんな環境で作業してるのかわかりませんが、IDEなどを使えばこういったミスタイプの類に関しては、どこで間違いが発生しているのかは指摘してもらえると思いますが。 こんな質問を何度もしてしまうぐらいなら、開発ツールの使い方から勉強された方が良いです。
ypk

2020/05/16 13:00

ぐうの音も出ません。 ご指摘ありがとうございます。 開発ツールについては、まだきちんと勉強していないので一度勉強してみます。ありがとうございました。
m.ts10806

2020/05/16 13:03

多少重くても良ければeclipse使えば何も設定なしでこれまで指摘されたようなことはツールが指摘してくれるので幾つかの質問はしなくても済みましたよ。
ypk

2020/05/16 13:08

そうなのですね、、、ありがとうございます。早速インストールしてみます
m.ts10806

2020/05/16 13:11

「オーバーロード」の質問された時に気づいたことはなかったのでしょうか。 https://teratail.com/questions/262085 もちろん先にコメントしたように、VSCodeでもそういうプラグインはあるのではないかと思います。そういう機能がないのでしたら広く使われることはないでしょうし。
退会済みユーザー

退会済みユーザー

2020/05/16 14:31 編集

eclipse使うならプラグイン追加済みのpleiades all in oneがおススメ。 https://mergedoc.osdn.jp/
ypk

2020/05/17 00:25

皆さんありがとうございます。 確認してみました。実は、会社の研修として私はJavaの学習をしており、現時点では今の開発環境で学習をしてほしいと研修担当の方から指摘をいただきました。 そのため、今の環境で開発を続けたいと思います。なお、今後は過去にしてしまったような質問を再度することがないようにできる限りの注意をしていきたいと思います。 eclipseについても、使えるタイミングになりましたら早速使用してみます。ありがとうございました。
guest

回答4

0

「クラスの中にクラス」は「インナークラス」「内部クラス」と呼ばれます。
JAVA インナークラス・メンバークラス

説明は上記を参考してもらうとして、やはりクラスを作るということはある役割を持たせるということになるので、今回のDogクラスの役割からするとインナークラスにすべきではないと思います。
別途クラスを作ってnewさせてください。

投稿2020/05/16 12:52

m.ts10806

総合スコア80850

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

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

ypk

2020/05/16 12:55

ご連絡ありがとうございます。 大変勉強になりました。 ありがとうございました。
m.ts10806

2020/05/16 12:56

できればどういう理解をしたかフィードバックいただきたく。 回答者がお礼よりも嬉しいのは質問者に回答した内容が理解されることです。 成長に繋がることです。
ypk

2020/05/16 13:05

①クラスの中にクラスを作成する「インナークラス」に注意をすること ②インスタンス化の方法は「クラス名 インスタンス名= new クラス名();」ただし、クラス名はアルファベット大文字から始めること です。ご丁寧にありがとうございました。 次回以降、どう理解したのかのフィードバックも行うようにします。
m.ts10806

2020/05/16 13:10

なるほど。ちなみに私の回答のポイントは下記です。 >やはりクラスを作るということはある役割を持たせるということになるので 役割と考えないとスパゲッティコードのできあがりです。 本来はパッケージを分けたり、そういうところから考える必要があります(半分は設計ですね)
ypk

2020/05/17 00:27

なるほど、、、役割を持たせるという考えはあまりありませんでした。 ありがとうございます。
m.ts10806

2020/05/17 00:36

「オブジェクト指向」の本質をおさらいしてください
guest

0

次の二か所です。

Dog dog = new Dog();

static class Dog {

Java

1public class Main { 2 3 public static void main(final String args[]) { 4 5 Dog dog = new Dog(); 6 dog.SetName("ポチ"); 7 8 } 9 10 static class Dog { 11 12 private String Name; 13 14 public void SetName(final String nm) { 15 Name = nm; 16 } 17 18 public void ShowProfile() { 19 System.out.println("名前は、" + Name + "です。"); 20 } 21 } 22 23} 24

投稿2020/05/16 12:49

編集2020/05/16 12:51
Zuishin

総合スコア28660

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

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

ypk

2020/05/16 12:53

ご指摘ありがとうございます。 無事、解決されました。 ありがとうございました。
guest

0

5行目がdog()になってます。
Dog()に直しましょう。

投稿2020/05/16 12:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ypk

2020/05/16 12:40

ご連絡ありがとうございます。 早速直してみたところ、今度は下記のようなエラーが発生しました。 Exception in thread "main" java.lang.Error: Unresolved compilation problem: No enclosing instance of type Main is accessible. Must qualify the allocation with an enclosing instance of type Main (e.g. x.new A() where x is an instance of Main). ーーーーーーーーーーーーーーー これはどういったことなのでしょうか。 ちなみに自分が書いたコードは下記のようになります。お手数をおかけしますが、どうぞよろしくお願いいたします。 ーーーーーーーーーーーーーーー public class Main { public static void main(String args[]) { Dog dog = new Dog(); dog.SetName("ポチ"); dog.ShowProfile(); } class Dog { private String Name; public void SetName(String nm) { Name = nm; } public void ShowProfile() { System.out.println("名前は、" + Name + "です。"); } } }
退会済みユーザー

退会済みユーザー

2020/05/16 12:46

Mainクラス内でDogクラスを宣言してるからですね。 DogクラスをMainクラスの外に移しましょう。
ypk

2020/05/16 12:51

すみません、ありがとうございます。 無事、解決されました。
退会済みユーザー

退会済みユーザー

2020/05/16 13:15

コメントを見たところVSCodeを使っているようですが、VSCodeはプラグインとかいろいろ面倒な設定が多いので初心者には少しハードルが高いかも。 pleiades all in one というダウンロードした瞬間からjavaの開発ができるパッケージをお勧めします。 VSCodeが好きで使っているならそのままつかっても構いませんが、IDEにこだわりがないのであればpleiades all in one を使った方がいいでしょう。
ypk

2020/05/17 00:30

ご連絡ありがとうございます。 VSコードを使用している理由は、4月から新卒で入社した会社で指示を受け、それに従って使用しています。 私も、皆さんから教えていただいたツールを試してみようとしたのですが、ちょっと今はそれが難しいです、、、、使える時期になりましたら、使ってみたいと思っています、ありがとうございました。
guest

0

ベストアンサー

Dog dog = new dog();→Dog dog = new Dog();
・・・
あとは、dog.ShowProfile()を呼ぶだだけです。

投稿2020/05/16 12:35

cateye

総合スコア6851

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

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

ypk

2020/05/16 12:40

ご連絡ありがとうございます。 早速直してみたところ、今度は下記のようなエラーが発生しました。 Exception in thread "main" java.lang.Error: Unresolved compilation problem: No enclosing instance of type Main is accessible. Must qualify the allocation with an enclosing instance of type Main (e.g. x.new A() where x is an instance of Main). ーーーーーーーーーーーーーーー これはどういったことなのでしょうか。 ちなみに自分が書いたコードは下記のようになります。お手数をおかけしますが、どうぞよろしくお願いいたします。 ーーーーーーーーーーーーーーー public class Main { public static void main(String args[]) { Dog dog = new Dog(); dog.SetName("ポチ"); dog.ShowProfile(); } class Dog { private String Name; public void SetName(String nm) { Name = nm; } public void ShowProfile() { System.out.println("名前は、" + Name + "です。"); } } }
cateye

2020/05/16 12:45

class Dog→static class Dogにして下さい。
ypk

2020/05/16 12:50

ご指摘ありがとうございます。 無事、出力がなされました。ありがとうございました。 ちなみになのですが、class Dog→static class Dogに変更しなければならなかった理由をもしよろしければ教えていただけると幸いです。 お手数をおかけしますが、どうぞよろしくお願いいたします。
cateye

2020/05/16 13:21

あまり詳しくないのですが・・・staticコンテキスト「main()」で、staticでないclassを参照することはできなかったと思います。
ypk

2020/05/17 00:28

ご連絡ありがとうございます。 そうなのですね、、、、!ありがとうございます。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問