🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

Q&A

解決済

1回答

1594閲覧

値渡しとメソッド呼び出し

i_oy

総合スコア3

Java

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

0グッド

2クリップ

投稿2020/12/24 17:33

出された問題に対して自分が作ったコードがその下にあります。

食べ物を表すクラス(クラス名:Food)
・名前を表すnameフィールド:String
・量を表すamountフィールド:int

・フィールド(名前、量)の値を引数とするコンストラクタ

package sample; public class Food { //フィールド public String name; //名前 public int amount; //量 //名前、量の値を引数とするコンストラクタ public Food(String name,int amount) { this.name = name; this.amount = amount; } }

動物を表すクラス(クラス名:Animal)

・性別を表すgenderフィールド:String
・年齢を表すageフィールド:int(初期値は0)

・満腹度合いを示すfullフィールド:int(初期値は0)

・フィールド(性別)の値を引数とするコンストラクタ
・フィールド(性別、年齢)の値を引数とするコンストラクタ

・食事を表すメソッドeatメソッド、引数はFoodインスタンス、戻り値はなし
>食事したFoodインスタンスの量(amountフィールド)分だけ満腹度合いが増える

・年齢が1つ増えるbirthdayメソッド、引数なし、戻り値なし

package sample; public class Animal { //フィールド public String gender; //性別 public static int age=0; //年齢(初期値0) public static int full=0; //満腹度合い(初期値0) //性別の値を引数とするコンストラクタ public Animal(String gender) { this.gender = gender; } //性別、年齢の値を引数とするコンストラクタ public Animal(String gender,int age) { this.gender = gender; this.age = age; } //食事を表すeatメソッド(引数Foodインスタンス、戻り値なし) public static void eat(int Food) { System.out.println(full += Food); } //年齢が1つ増える(引数、戻り値なし) public static void birthday() { System.out.println(age += 1); } }

動物クラスを継承した犬を表すクラス(クラス名:Dog)

・名前を表すnameフィールド:String

・フィールド(性別、名前)の値を引数とするコンストラクタ
・フィールド(性別、年齢、名前)の値を引数とするコンストラクタ

package sample; //動物クラスを継承 public class Dog extends Animal{ //フィールド String name; //性別、名前の値を引数とするコンストラクタ public Dog(String gender,String name) { super(gender); this.name = name; } //性別、年齢、名前の値を引数とするコンストラクタ public Dog(String gender,int age,String name) { super(gender,age); this.name = name; } }

Mainクラス(クラス名:DogCaller)

mainメソッドを実装する

Dogインスタンス(性別オス、年齢0才、名前ポチ)を作成し、
Dogインスタンスの名前と年齢と満腹度合いを表示する

>実行結果
名前:ポチ、年齢:0才、性別:オス、満腹度合い:0

Foodインスタンス(名前ドックフード、量10)を作成し、
Dogインスタンスのeatメソッドの引数として与える
Dogインスタンスのbirthdayメソッドを呼び出す
Dogインスタンスの名前と年齢と満腹度合いを表示する

>実行結果
名前:ポチ、年齢:1才、性別:オス、満腹度合い:10

package sample; //Mainクラス public class DogCaller { public static void main(String[] args) { //Dogインスタンスを作成(性別、年齢、名前) Dog dog = new Dog("オス",0,"ポチ"); //Dogインスタンスの名前、年齢、満腹度合いを表示 System.out.println("名前:"+dog.name+"、年齢:"+dog.age+"才、"+"性別:"+dog.gender+"、満腹度合い:"+dog.full); //Foodインスタンス(名前、量) Food food = new Food("ドッグフード",10); //Dogインスタンスのeatメソッドの引数として与える //Dogインスタンスのbirthdayメソッドを呼び出す System.out.println("名前:"+dog.name+"、年齢:"+dog.age+"才、"+"性別:"+dog.gender+"、満腹度合い:"+dog.full); } }

この場合のDogCallerクラスにおいて、「Dogインスタンスのeatメソッドの引数として与える」「Dogインスタンスのbirthdayメソッドを呼び出す」の2つのコードが分かりません。
どなたか解答いただけるとありがたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、

・食事を表すメソッドeatメソッド、引数はFoodインスタンス、戻り値はなし

>食事したFoodインスタンスの量(amountフィールド)分だけ満腹度合いが増える

に対するコード

java

1 //食事を表すeatメソッド(引数Foodインスタンス、戻り値なし) 2 public static void eat(int Food) { 3 System.out.println(full += Food); 4 }

が条件に合っていません。これをクリアしない限り、「Dogインスタンスのeatメソッドの引数として与える」は不可能です。ちなみに、「直前に記述したFoodインスタンスをDogインスタンスのeatメソッドの引数として与える」という事だと思われます。
「Dogインスタンスのbirthdayメソッドを呼び出す」に至ってはそのままです。

投稿2020/12/24 19:33

swordone

総合スコア20669

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

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

i_oy

2020/12/25 02:19

そのeatメソッドはどのように書けばいいのでしょうか?
swordone

2020/12/25 03:59

条件に合うように書けばいいのです。
i_oy

2020/12/25 04:46

//食事を表すeatメソッド(引数Foodインスタンス、戻り値なし) public static void eat(int Food) { full += Food; } これで大丈夫ですか?
TakaiY

2020/12/25 10:40

eatメソッドについては、 ---- ・食事を表すメソッドeatメソッド、引数はFoodインスタンス、戻り値はなし >食事したFoodインスタンスの量(amountフィールド)分だけ満腹度合いが増える --- と指定されていますよね? このとおりに書きましょう。
i_oy

2020/12/26 16:22 編集

その通りに書いたつもりなんですけど…どこが間違ってるのか分からないです
dodox86

2020/12/26 08:23

>@質問者さん eat(int Food)は、int型のFoodと言う名前の変数(仮引数)なだけで、Foodクラスのインスタンスではないです。
i_oy

2020/12/28 07:56

public static void eat(Food amount) { full += amount.amount; } こうですか?
TakaiY

2020/12/28 08:50

それで合ってます。 ただ、Foodクラスのインスタンスがamountという名前なのはまぎらわしいので、food として、 full += food.amount としたほうがわかりやすいですね。
i_oy

2020/12/28 13:55

わかりました。 長く付き合ってくださってありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問