hayashi0001
@hayashi0001 (S hayashi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

javaで戻り値に配列を設定したい

解決したいこと

javaで戻り値に配列を設定したい

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

 配列monsterを戻り値として設定したいがmonsterの下に赤い波線があり「monster を変数に解決できません」と書いてあります。

class TextQuestCard{
	
	String name;
	int level;
	int conditionsPoint;
	int atkPoint;
	int maxHitPoint;
	int hitPoint;
	int speed;
	
	TextQuestCard(String name, int level, int conditionsPoint, int atkPoint, int maxHitPoint, int hitPoint, int speed){
		this.name = name;
		this.level = level;
		this.conditionsPoint = conditionsPoint;
		this.atkPoint = atkPoint;
		this.maxHitPoint = maxHitPoint;
		this.hitPoint = hitPoint;
		this.speed = speed;
	}
	
	/*回数は66回まで*/
	void adventure(TextQuestCard[] monster) {
		int random_adventure = (int)(Math.random()*100) + 1;
		if(1 <= random_adventure && random_adventure >= 10) {
			/*何もなかった*/
			System.out.println("今日は何も見つからなかった。");
			this.hitPoint = this.hitPoint + (this.maxHitPoint*10)/100;
		}
		else if(11 <= random_adventure && random_adventure >= 100) {
			/*モンスターに出くわす*/
			if(this.level >= this.conditionsPoint) {
				int random_monster = (int)(Math.random()* conditionsPoint) + 1;
				return monster[random_monster];
			}
		}
	}
	
	void printInfo() {
		System.out.println("[状態出力]");
		System.out.println(this.name);
		System.out.println("体力: " + this.hitPoint + " 攻撃力: " + this.atkPoint + " 素早さ: " + this.speed);
		
	}
}

public class TextQuest {
	public static void main(String[] args) {
		/*キャラクター*/
		
		TextQuestCard[] monster = new TextQuestCard[20];
		
		TextQuestCard player = new TextQuestCard("冒険者", 1, 0, 2, 5, 5, 3);
		TextQuestCard partner = new TextQuestCard("相棒", 1, 0, 3, 4, 4, 4);
		
		monster[0] = new TextQuestCard("オオカミ", 0, 1, 3, 2, 2, 5);
		monster[1]= new TextQuestCard("スライム",0,1,1,3,3,5);
		monster[2] = new TextQuestCard("グール",0,3,3,5,5,3);
		monster[3] = new TextQuestCard("ゴブリン",0,5,5,5,5,4);
		monster[4] = new TextQuestCard("コボルト",0,5,5,4,4,5);
		monster[5] = new TextQuestCard("クマ",0,10,8,10,10,7);
		monster[6] = new TextQuestCard("スケルトン",0,10,5,10,10,4);
		monster[7] = new TextQuestCard("オーク",0,15,10,15,15,6);
		monster[8] = new TextQuestCard("ゴーレム",0,15,10,40,40,5);
		monster[9] = new TextQuestCard("ミミック",0,15,15,20,20,10);
		monster[10] = new TextQuestCard("ドレイク",0,20,15,30,30,8);
		monster[11] = new TextQuestCard("トロール",0,20,15,40,40,5);
		monster[12] = new TextQuestCard("オーガ",0,25,20,50,50,8);
		monster[13]= new TextQuestCard("ドラゴン",0,25,20,40,40,10);
		monster[14] = new TextQuestCard("勇者",0,25,22,60,60,9);
		monster[15] = new TextQuestCard("グリフォン",0,26,23,55,55,12);
		monster[16] = new TextQuestCard("ケルベロス",0,26,25,60,60,10);
		monster[17] = new TextQuestCard("リッチ",0,27,25,70,70,8);
		monster[18] = new TextQuestCard("デュラハン",0,28,28,80,80,15);
		monster[19] = new TextQuestCard("雪の女王",0,28,30,65,65,12);
		monster[20] = new TextQuestCard("魔王",0,30,35,100,100,10);
		
		player.sleep();
		player.printInfo();
	}
}

情報が足りなかったりした場合追加します。
5/30更新 
助けてーください。

0

1Answer

値をreturnするならvoid型ではなく返す値の型を指定しましょう。
こんなことがしたいのでしょうか?
モンスターは1種類しか出くわしませんけど。
判定処理が変なところも修正しました。

class TextQuestCard{
	
	String name;
	int level;
	int conditionsPoint;
	int atkPoint;
	int maxHitPoint;
	int hitPoint;
	int speed;

	TextQuestCard(String name, int level, int conditionsPoint, int atkPoint, int maxHitPoint, int hitPoint, int speed){
		this.name = name;
		this.level = level;
		this.conditionsPoint = conditionsPoint;
		this.atkPoint = atkPoint;
		this.maxHitPoint = maxHitPoint;
		this.hitPoint = hitPoint;
		this.speed = speed;
	}
	
	/*回数は66回まで*/
	TextQuestCard adventure(TextQuestCard[] monster) {
		int random_adventure = (int)(Math.random()*100) + 1;
		if(1 <= random_adventure && random_adventure <= 10) {
			/*何もなかった*/
			this.hitPoint = this.hitPoint + (this.maxHitPoint*10)/100;
		}
		else if(11 <= random_adventure && random_adventure <= 100) {
			/*モンスターに出くわす*/
			if(this.level >= this.conditionsPoint) {
				int random_monster = (int)(Math.random() * (conditionsPoint + 1));
				return monster[random_monster];
			}
		}
		return null;
	}
	
	void printInfo() {
		System.out.println("[状態出力]");
		System.out.println(this.name);
		System.out.println("体力: " + this.hitPoint + " 攻撃力: " + this.atkPoint + " 素早さ: " + this.speed);
		
	}
}

public class TextQuest {
	public static void main(String[] args) {
		/*キャラクター*/
		
		TextQuestCard[] monster = new TextQuestCard[21];
		
		TextQuestCard player = new TextQuestCard("冒険者", 1, 0, 2, 5, 5, 3);
		TextQuestCard partner = new TextQuestCard("相棒", 1, 0, 3, 4, 4, 4);
		
		monster[0] = new TextQuestCard("オオカミ", 0, 1, 3, 2, 2, 5);
		monster[1] = new TextQuestCard("スライム",0,1,1,3,3,5);
		monster[2] = new TextQuestCard("グール",0,3,3,5,5,3);
		monster[3] = new TextQuestCard("ゴブリン",0,5,5,5,5,4);
		monster[4] = new TextQuestCard("コボルト",0,5,5,4,4,5);
		monster[5] = new TextQuestCard("クマ",0,10,8,10,10,7);
		monster[6] = new TextQuestCard("スケルトン",0,10,5,10,10,4);
		monster[7] = new TextQuestCard("オーク",0,15,10,15,15,6);
		monster[8] = new TextQuestCard("ゴーレム",0,15,10,40,40,5);
		monster[9] = new TextQuestCard("ミミック",0,15,15,20,20,10);
		monster[10] = new TextQuestCard("ドレイク",0,20,15,30,30,8);
		monster[11] = new TextQuestCard("トロール",0,20,15,40,40,5);
		monster[12] = new TextQuestCard("オーガ",0,25,20,50,50,8);
		monster[13] = new TextQuestCard("ドラゴン",0,25,20,40,40,10);
		monster[14] = new TextQuestCard("勇者",0,25,22,60,60,9);
		monster[15] = new TextQuestCard("グリフォン",0,26,23,55,55,12);
		monster[16] = new TextQuestCard("ケルベロス",0,26,25,60,60,10);
		monster[17] = new TextQuestCard("リッチ",0,27,25,70,70,8);
		monster[18] = new TextQuestCard("デュラハン",0,28,28,80,80,15);
		monster[19] = new TextQuestCard("雪の女王",0,28,30,65,65,12);
		monster[20] = new TextQuestCard("魔王",0,30,35,100,100,10);
		
		//player.sleep();
		player.printInfo();
		TextQuestCard across = player.adventure(monster);
		if (across == null) {
			System.out.println("今日は何も見つからなかった。");
		} else {
			System.out.println(across.name + "に出くわした!");
		}
	}
}
1Like

Comments

  1. @hayashi0001

    Questioner

    回答ありがとうございます!
    また質問になってしまうのですが、なぜ自分のコードではmonster(戻り値に配列を設定)にエラーが出てしまう原因と解決方法を教えてくれませんか?
    あと、配列にmonsterだけでなくplayerも配列に格納していて、playerのレベルに応じて出てくるモンスターをその範囲内でランダムに出したいのですがif文はあのままで動きますか?
  2. 元のコードは不完全なのでコメントできません。
    処理はメソッド内に書かないといけません。
    変数monsterをインスタンス変数かメソッド引数で共有しないといけません。
  3. 質問のコードに近い形にコードを修正してみました。
  4. @hayashi0001

    Questioner

    いまさらになってしまいますがこれが今のとこのコードです。
    更新したこのコードでインスタンス変数かメソッド引数で共有はできますか?
    もし一般的な書き方と逸脱したところがありましたら指摘お願します。
  5. コードを修正してみました。
  6. @hayashi0001

    Questioner

    思い通りに動くことができました!
    丁寧な説明ありがとうございました。
  7. @hayashi0001

    Questioner

    エラーがなくなりました!ありがとうございます。
    丁寧に教えてくださりありがとうございます!

Your answer might help someone💌