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

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

ただいまの
回答率

89.12%

オブジェクト指向がいまいち分かりません

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,486

Kuri9898

score 18

オブジェクト指向の問題に取りんでいるのですが、いまいちわかりません。
実装したいこと
hero、sword、matangoを生成し、heroにswordを装備させてmatangoに攻撃する流れをしたい。
エラー
いずれも実行前にgettterメソッド、setterメソッド、matangoオブジェクトのattackメソッドが未定義とエラーが出てしまう。
eclipseの実行の編成にも出てこない。

//Main.javaから抜粋

    Sword s1 = new Sword("銅のつるぎ",5);
    System.out.println(s1.getName() + "を装備した。");
    Matango m1 = new Matango('a');
    System.out.println("お化けキノコ"+m1.getSuffix() + "が生まれた");
    System.out.println("勇者と" + "お化けキノコ" + m1.getSuffix() + "が戦います");
    h1.attack(h1,m1,s1);
// atackメソッド
public void attack(Hero h, Matango m, Sword s){
    int matangoHp = m.getHp();
    int damage = s.getDamage();
    System.out.println(this.name + "の攻撃!");
    matangoHp -= damage;
    m.setHp(matangoHp);
    System.out.println("お化けキノコ" + m.getSuffix() + "に" + s.getDamage() + "ダメージを与えた");
    System.out.println("お化けキノコ" + m.getSuffix() + "からの攻撃!");
    m.attack(h);
    if(h.getHp() < 0){
    this.die();
    }

ソースコード

///Main.java
package e17kuri.rpg;
import e17kuri.rpg.Hero;
import e17kuri.rpg.Matango;
import e17kuri.rpg.Sword;
import e17kuri.rpg.SuperHero;
import e17kuri.rpg.PoisonMatango;
public class Main {
    public static void main(String[] args){
        Hero h1 = new Hero("勇者ミナト");
        System.out.println("勇者が生まれた");
        Sword s1 = new Sword("銅のつるぎ",5);
        System.out.println(s1.getName() + "を装備した。");
        Matango m1 = new Matango('a');
        System.out.println("お化けキノコ"+m1.getSuffix() + "が生まれた");
        System.out.println("勇者と" + "お化けキノコ" + m1.getSuffix() + "が戦います");
        h1.attack(h1,m1,s1);
    }
}

//Hero.java
package e17kuri.rpg;
import e17kuri.rpg.Matango;
import e17kuri.rpg.Sword;
public class Hero {
    private String name;
    private int hp; // privateでアクセス修飾
    //ソードclassの追加
    public Sword sword;
    private static int money;

    // 初期定義のメソッド
    public void sleep() {
        this.hp =100;
        System.out.println(this.name + "は、眠って回復した!");
    }
    public void sit(int sec) {
        this.hp +=sec;
        System.out.println(this.name + "は、" + sec + "秒座った!");
        System.out.println("HPが" + sec + "ポイント回復した。");
    }
    // final修飾子をつけてオーバーライド(メソッドの上書き)を禁止
    public final void slip() {
        this.hp -= 5;
        System.out.println(this.name + "は、ころんだ!");
        System.out.println("5のダメージ");
    }
    public void run() {
        System.out.println(this.name + "は、逃げ出した!");
        System.out.println("GAMEOVER");
        System.out.println("最終HPは" + this.hp + "でした。");
    }
    public void attack() {
        System.out.println(this.name + "は攻撃した!");
        System.out.println("敵に5ポイントのダメージを与えた!");
    }
    // コンストラクタの定義
    public Hero(String name) { // ①
        this.hp = 100;
        this.name = name;
    }
    public Hero() { // ②
        this("ダミー"); // ①を呼び出す
    }
    // 静的なメソッドの例
    public static void setRandomMoney(){
        Hero.money = (int) (Math.random() * 1000);
    }
    // アクセス修飾の定石 フィールドはprivate,メソッドはpublic
    private void bye() {
        System.out.println("勇者は別れを告げた");
    }
    private void die() {
        System.out.println(this.name + "は死んでしまった!");
    }
    // atackメソッド
    public void attack(Hero h, Matango m, Sword s){
        int matangoHp = m.getHp();
        int damage = s.getDamage();
        System.out.println(this.name + "の攻撃!");
        matangoHp -= damage;
        m.setHp(matangoHp);
        System.out.println("お化けキノコ" + m.getSuffix() + "に" + s.getDamage() + "ダメージを与えた");
        System.out.println("お化けキノコ" + m.getSuffix() + "からの攻撃!");
        m.attack(h);
        if(h.getHp() < 0){
            this.die();
        }
    }
    // getterメソッドの定石
    public String getName() {
        return this.name;
    }
    public int getHp() {
        return this.hp;
    }
    // setterメソッドの定石
    public void setName(String name) {
        this.name = name;
    }
    public void setHp(int hp) {
        this.hp = hp;
    }
}

//Matango.java
package e17kuri.rpg;
import e17kuri.rpg.Hero;
// マタンゴクラスの生成
public class Matango {
    private int hp = 50;
    private char suffix;
    // コンストラクタ
    public Matango(char suffix){
        this.suffix = suffix;
    }
    public Matango() { // ②
        this('e'); // ①を呼び出す
    }
    public void attack(Hero h){
        System.out.println("キノコ" + this.suffix + "の攻撃");
        System.out.println("10のダメージ");
        h.setHp(h.getHp() - 10);
    }
    //getterHp
    public int getHp() {
        return this.hp;
    }
    //setterHp
    public void setHp(int hp) {
        this.hp = hp;
    }
    //getterSuffix
    public char getSuffix(){
        return this.suffix;
    }
    //setSuffix
    public void setSuffix(char suffix){
        this.suffix = suffix;
    }
}

//Sword.java
package e17kuri.rpg;

public class Sword {
    private String name;
    private int damage;
    // コンストラクタ
    public Sword(String name, int damage){ //①
        this.name = name;
        this.damage = damage;
    }
    public Sword() { // ②
        this("ダミー",0); // ①を呼び出す
    }
    // getterName
    public String getName() {
        return this.name;
    }
    // getterDamage
    public int getDamage() {
        return this.damage;
    }
    // setterName
    public void setName(String name) {
        this.name = name;
    }
    // setterDamage
    public void setDamage(int damage) {
        this.damage = damage;
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

eclipseを再起動したら治りました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる