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

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

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

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

Q&A

解決済

1回答

3298閲覧

コンストラクタを利用して文字を出力させたい。

ypk

総合スコア83

Java

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

0グッド

0クリップ

投稿2020/05/17 10:42

こんばんは。
Javaの学習をしているものです。

現在、下記の問題に取り組んでいます。

練習問題7-4

前問のDogクラスに、次の内容を追加しなさい。
犬種を保持するメンバー変数。(文字列型)
犬種を設定する引数(String)を持つコンストラクタ。
ShowProfileメソッドを犬種、名前、年齢、を表示するようにする。
修正したDogクラスを使用して次のプログラムを作成しなさい。

犬種を指定して犬クラスの変数を作成する。
名前、年齢を設定する。
プロフィールを表示する。

まだコンストラクタに対する理解が不十分である中、このような問題に取り組んでいることは自覚しております。

もし何か、気になる箇所などございましたらご教授いただければと幸いです。
どうぞよろしくお願いいたします。

#実現したいこと

名前は、ポチです。
年齢は、5歳です。
品種は、マンチカンです。
名前は、ボブです。
年齢は、15歳です。
品種は、メインクーンです。

を出力させたい。

#コード

Java

1 2class Main2 { 3 4 public static void main(String[] args) { 5 6 Cat cat1 = new Cat(); 7 Cat cat2 = new Cat(); 8 9 Kind cat1 = new Kind("マンチカン"); 10 Kind cat2 = new Kind("メインクーン"); 11 12 cat1.SetName("ポチ"); 13 cat1.SetAge(5); 14 15 cat2.SetName("ボブ"); 16 cat2.SetAge(15); 17 18 cat1.ShowProfile(); 19 20 cat2.ShowProfile(); 21 22 } 23 24} 25 26class Cat { 27 private String Name; 28 private int Age; 29 30 public void SetName(String nm) { 31 Name = nm; 32 } 33 34 public void SetAge(int age) { 35 Age = age; 36 } 37 38 public void ShowProfile() { 39 System.out.println("名前は、" + Name + "です。"); 40 System.out.println("年齢は、" + Age + "歳です。"); 41 42 } 43} 44 45public class Kind { 46 47 public Kind(String kind) { 48 System.out.println("猫種は、" + kind + "です。"); 49 } 50}

#エラー

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

Duplicate local variable cat1 Duplicate local variable cat2 The method SetName(String) is undefined for the type Kind The method SetAge(int) is undefined for the type Kind The method SetName(String) is undefined for the type Kind The method SetAge(int) is undefined for the type Kind The method ShowProfile() is undefined for the type Kind The method ShowProfile() is undefined for the type Kind at Main2.main(Main2.java:9)

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

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

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

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

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

Zuishin

2020/05/17 10:56

取り組む前に理解したらどうでしょう?
ypk

2020/05/17 10:59

理解する努力はしていますが、やはり問題を解きながら学習をしたほうが効率が良いと考えたので問題にも取り組んでいます。書籍やインターネットの情報をインプットするだけでは、今の私では十分な理解ができないので。
momon-ga

2020/05/17 10:59

Duplicate local variable cat1 の意味は、わかりますか?
ypk

2020/05/17 10:59

何か学習方法などでアドバイスなどあればご教授いただけると幸いです、どうぞよろしくお願いいたします。
Zuishin

2020/05/17 11:04

練習問題というのは、それを解けるだけの知識があるという前提で出されるものなので、解けないのであればその少し前の説明を見直して自分でコードを色々といじりながら理解してから臨むものです。少なくとも著者はそのように想定して書いています。
ypk

2020/05/17 11:05

意味自体は 同じ名前の変数を重複して宣言しているために起きるエラー と理解しています。 つまり、KindクラスとCatクラスの両方でcat1を使用していることが問題であるために発生するエラーなのですかね、、、?
Zuishin

2020/05/17 11:07

ああ、練習問題しかない物を選んでやってるんですね。単なる自殺行為です。
momon-ga

2020/05/17 11:08

ypkさん。その通り。< KindクラスとCatクラスの両方でcat1を使用していることが問題 エラーの意味を理解して、少しづつ修正すれば必ず完成します。 がんばって!!
ypk

2020/05/17 11:08

Zuishinさん ありがとうございます。 Zuishinさんのアドバイスをもとに、練習問題に取り組む前に例題に出ているコードをいじって理解する工程を自分の中で取り入れたいと思います。 ありがとうございました。
ypk

2020/05/17 11:08

momon-gaさん はい、そちらに乗っている問題です。
ypk

2020/05/17 11:26

momon-gaさん ありがとうございます。 エラーの意味についても、ご教授くださりありがとうございました。 今後は、エラーの意味を理解して少しづつ修正することにもう少し時間を割きたいと思います。 ここ数日で、皆さんからたくさんアドバイスなどをいただけているおかげで少しづつではありますが、理解が深まってきている気がします。引き続き、頑張ります。
ypk

2020/05/17 11:30

Zuishinさん そうなのですね。 自分はまだ、参考書と問題が一体になった教材を持っていないためしばらくはネットに転がっている課題に挑戦したいと思いますが、近日中に教材を揃えます。ありがとうございます。
guest

回答1

0

ベストアンサー

前問のDogクラスに、次の内容を追加しなさい。
犬種を保持するメンバー変数。(文字列型)

猫に置き換えていますが、猫種を保持するメンバー変数(文字列型)は、Cat に追加します。ここでは、kind とします。

java

1class Cat { 2 private String Name; 3 private int Age; 4 private String kind; // 猫種を保持するメンバー変数(文字列型) 5

犬種を設定する引数(String)を持つコンストラクタ。

コンストラクタは、クラス名と同一になるため、次のようになります。

java

1 public Cat(String kind) { 2 this.kind = kind; 3 }

ShowProfileメソッドを犬種、名前、年齢、を表示するようにする。

現在のコードに犬種を表示するコードを追加します。

java

1 public void ShowProfile() { 2 System.out.println("名前は、" + Name + "です。"); 3 System.out.println("年齢は、" + Age + "歳です。"); 4 System.out.println("品種は、" + kind + "です。"); // 品種の出力を追加 5 }

修正したDogクラスを使用して次のプログラムを作成しなさい。

犬種を指定して犬クラスの変数を作成する。
名前、年齢を設定する。
プロフィールを表示する。

Main2 クラスはいかのようになります。

java

1class Main2 { 2 3 public static void main(String[] args) { 4 5 Cat cat1 = new Cat("マンチカン"); 6 Cat cat2 = new Cat("メインクーン"); 7 8 cat1.SetName("ポチ"); 9 cat1.SetAge(5); 10 11 cat2.SetName("ボブ"); 12 cat2.SetAge(15); 13 14 cat1.ShowProfile(); 15 16 cat2.ShowProfile(); 17 18 } 19 20}

今回の問題に限れば、Kind クラスは不要です。

投稿2020/05/17 11:01

編集2020/05/17 11:15
Yasumichi

総合スコア1773

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

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

momon-ga

2020/05/17 11:06

「コンストラクタは、クラスメイトと同一になるため」の意味が、わからない。誤記?
Yasumichi

2020/05/17 11:13

「クラス名と」の誤りでした。
ypk

2020/05/17 11:21

Yasumichiさん ご回答ありがとうございました。 無事、解決されました。 てっきり、Kindクラスが必要なものなのかと考えていました。 (こちらの記事を参照しながら取り組んでいました。 https://www.javadrive.jp/start/constructor/index2.html ) ①コンストラクタを使用するときはメンバ変数を用意すること ②コンストラクタとクラス名は同一にすること ③thisを利用すること を理解しました。ありがとうございました。 もしよろしければ、thisをコンストラクタ内で利用する理由をもう少し詳しくご教授いただくことは可能でしょうか。 thisの意味は「thisは予約語で、そのクラスのオブジェクト自身を表す」ということは理解しているのですが、いまいちまだ、自分の中で納得感を持って理解することができておりません。 お手数をおかけしますが、どうぞよろしくお願いいたします。
Yasumichi

2020/05/17 11:25

コンストラクタの引数とメンバー変数が同一であるため、メンバー変数であることをコンパイラーに明示するため、this を使います。 (引数名を変えとけば、this をつける必要はありませんが、あまりやりません。)
Yasumichi

2020/05/17 11:35

> ①コンストラクタを使用するときはメンバ変数を用意すること むしろ、メンバー変数を初期化するためにコンストラクタがあると考えた方が良いと思います。
ypk

2020/05/17 11:38

ありがとうございます。 ちなみになのですが、この問題では ・コンストラクタの引数→String kind ・メンバ変数→String Kind という認識で大丈夫でしょか
ypk

2020/05/17 11:39

補足についても確認しました。 大変勉強になりました。ありがとうございます。
Yasumichi

2020/05/17 11:41

多分合っていると思いますが、class のスコープの中で宣言されている String kind がメンバー変数になります。 class Cat { private String Name; private int Age; private String kind; // 猫種を保持するメンバー変数(文字列型) ← これ
Yasumichi

2020/05/17 11:42

あと、通常、変数は小文字で始めます。これは、 class と区別するためのコーディング規約です。 コンパイルエラーにはなりませんが。
Yasumichi

2020/05/17 12:33 編集

また、コンストラクターは引数を持たないものもあります。
ypk

2020/05/17 11:46

ご丁寧にありがとうございます。 変数は今後、小文字で書くようにします。 デフォルトコンストラクタについても、勉強します。 本当にありがとうございました。
LouiS0616

2020/05/17 12:19

@Yasumichi さん > コンストラクターは引数を持たないものもあります。(デフォルトコンストラクター) 重箱の隅ですが「引数を持たないコンストラクタ = デフォルトコンストラクタ」と解釈できてしまう表現な気がします。
Yasumichi

2020/05/17 12:34

そうですね。そこは誤りでした。
ypk

2020/05/17 13:21

皆さんありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問