nnmynnmy
@nnmynnmy (kdoake qkdoi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Java 同クラスから戻り値なしのメソッドの呼び出しができません。

解決したいこと

Javaで同クラスから戻り値なしのメソッドを呼び出したいのですが、上手く呼び出すことができなくなってしまいました。今までメソッドを呼び出す時は「メソッド名(引数1…);」という形で呼び出せていたのですが、どうしてエラーになってしまうのか分からないため、ご教授いただければ幸いです。

発生している問題・エラー

構文エラーがあります。"... VariableDeclaratorId" を挿入して FormalParameterList を完了してください
- メソッドの戻りの型がありません

例)
image.png
image.png

該当するソースコード

dispメソッドの呼び出しができません。

package question19;

public class Question19 {
	// 犬の情報を管理するメソッドを呼び出し
	DogAvatar[] avatars = getDogAvatars();
	
	//画面表示を行うメソッド呼び出し
	disp(avatars);



	public static DogAvatar[] getDogAvatars() {
		// インスタンス生成
		DogAvatar[] dogAvatars = new DogAvatar[3];
		dogAvatars[0] = new DogAvatar("ハチ","秋田犬",1);
		dogAvatars[1] = new DogAvatar("ポチ","柴犬",5);
		dogAvatars[2] = new DogAvatar("","雑種",0);

		return dogAvatars;
	}

	/**
	 * 犬の情報を表示するメソッド
	 * @param dogAvatars
	 */
	public static void disp(DogAvatar[] dogAvatars) {
		// 拡張for文
		for(DogAvatar info: dogAvatars) {

			System.out.print(info.getName() + "の情報:種類は");
			System.out.print(info.getKind() + "で、年齢は");
			System.out.println(info.getAge() +  "歳");
			return;

		}
	}
}

DogAvatarクラス
setAgeメソッドの呼び出しができません。

package question19;
/**
 * Dogクラスを継承
 * 犬の情報を管理するクラス
 */
public class DogAvatar extends Dog {
	// 犬の年齢
	private Integer age;

	// 引数3つのコンストラクタ
	public DogAvatar(String name, String kind, Integer age) {
		// Dogクラスを継承してるからそこから呼び出す
		setName(name);
		setKind(kind);
	}


	// setAgeメソッドの呼び出し
	setAge(age);


	public void setAge(Integer age) {
		this.age = age;
	}

	public Integer getAge() {
		return age;
	}
}

Dogクラス(エラーは出ていないので問題ないかと思います)

public class Dog {
	private String name;
	private String kind;
	
	public  Dog() {
		//引数なしのコンストラクタ
	}
	
	public Dog(String name, String kind) {
		// 引数が2つのコンストラクタ
		setName(name);
		setKind(kind);
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getKind() {
		return kind;
	}
	
	public void setKind(String kind) {
		this.kind = kind;
	}
	
}

自分で試したこと

メソッド名の前にvoidを入れてみましたが上手くいきませんでした。

0

3Answer

Comments

  1. @nnmynnmy

    Questioner

    回答いただきありがとうございます!
    無事解決いたしました。

Comments

  1. @nnmynnmy

    Questioner

    回答いただきありがとうございます。修正したところ解決いたしました!
    よろしければ最初のdispメソッドの呼び出しがなぜできないのかご教授頂くことはできますでしょうか…?重ねて申し訳ありません。
  2. 学校の課題とかですよね?
    javaに限った話ではありませんので、基本を抑えたほうが良いと思いますよ。
  3. @nnmynnmy

    Questioner

    仰る通りです。mainメソッドを書き忘れるというド初心者丸出しの間違いでした…。
    mainメソッドを宣言したクラスが実行時に最初に呼び出されるのでそもそもmainメソッドが無ければ動きませんよね。基本が抜けていることを実感したので、しっかり身に付けたいと思います。ご回答頂きありがとうございました。

class宣言直下には、変数宣言と初期値代入、初期化ブロック、コンストラクタ、メソッド、内部クラスが書けます。処理は書けません。
インスタンス生成時に実行する処理を書きたいなら、初期化ブロック(引数は指定できない)かコンストラクタ(引数を指定できる)に書きましょう。

1Like

Comments

  1. @nnmynnmy

    Questioner

    ご回答頂きありがとうございます!class宣言直下でできること(変数数宣言と初期値代入、初期化ブロック、コンストラクタ、メソッド、内部クラス)とメソッド内で出来ること(処理の記述)に対する理解が不十分だったため大変参考になりました。
    mainメソッドを閉じた後に流れで他のメソッドを書いていたのですが、クラス宣言下だからメソッドを書いたり変数宣言をしたりコンストラクタや初期化ブロックなどを書けるのですね。ありがとうございます。

Your answer might help someone💌