簡體   English   中英

java中如何在沒有main方法的情況下從一個類調用toString()方法到另一個類

[英]How to call toString() Method from one class to another class without main method in java

我正在嘗試制作簡單的口袋妖怪游戲。

如何從Trainer.java調用toString方法到Arena.java 我嘗試使用this.trainer1.toString() ,但它不起作用。 Arena.java也沒有main方法。

編譯程序時出現此錯誤

Arena.java:14: error: illegal start of type
    this.trainer1.toString();
    ^
Arena.java:14: error: ';' expected
    this.trainer1.toString();
        ^
Arena.java:14: error: <identifier> expected
    this.trainer1.toString();
                          ^
Arena.java:15: error: illegal start of type
    this.trainer2.toString();
    ^
Arena.java:15: error: ';' expected
    this.trainer2.toString();
        ^
Arena.java:15: error: <identifier> expected
    this.trainer2.toString();
                          ^
6 errors

這是文件

培訓師.java

import java.util.Random;

public class Trainer {

    private String nameTrainer;
    private Taschenmonster[] inventar = new Taschenmonster[6];

    // getter and setter Methods for attributes

    /*
     * getter and setter for nameTrainer
     */
    public String getNameTrainer() {
        return this.nameTrainer;
    }
    public void setNameTrainer(String nameTrainer) {
        this.nameTrainer = nameTrainer;
    }

    /*
     * getter and setter for inventar
     */
    // public Taschenmonster getInventar() {
    //     return this.inventar;
    // }
    // public void setName(String nameTrainer) {
    //     this.nameTrainer = nameTrainer;
    // }

    // constructor of class Trainer
    Trainer (String nameTrainer) {
        this.nameTrainer = nameTrainer;
    }

    /*
     * Adds Taschenmonster to Inventar of Trainer.
     */
    public void receive(int pos, Taschenmonster monsterObject) {
       if (pos < 6) {
           inventar[pos] = monsterObject;
       } 
    }

    /*
     * give out a randomly selected Taschenmonster for battle
     */
    public Taschenmonster send() {

        int random = new Random().nextInt(inventar.length);

        return inventar[random];

    }

    /*
     * Overriding the string method 
     */
    @Override
    public String toString() {
        return "Taschenmonster von " + nameTrainer + "\n" + inventar[0].getNameMonster() + " " + inventar[1].getNameMonster() + " " + inventar[2].getNameMonster() + " " + inventar[3].getNameMonster() + " " + inventar[4].getNameMonster() + " " + inventar[5].getNameMonster();    
    }

    
}

Arena.java

public class Arena {


    private Trainer trainer1;
    private Trainer trainer2;

    // constructor of class Arena
    Arena (Trainer trainer1, Trainer trainer2) {
        this.trainer1 = trainer1;
        this.trainer2 = trainer2;
    }

    // giving out the profile of the trainers
    // this.trainer1.toString();
    // this.trainer2.toString();


}

主.java

public class Main {
    public static void main(String args[]) {

        // making objects from class Taschenmonster
        Taschenmonster t1 = new Taschenmonster("Pikachu", 5, 7);
        Taschenmonster t2 = new Taschenmonster("Eevee", 5, 6);
        Taschenmonster t3 = new Taschenmonster("Charmander", 5, 4);
        Taschenmonster t4 = new Taschenmonster("Bulbasaur", 5, 5);
        Taschenmonster t5 = new Taschenmonster("Squirtle", 5, 2);
        Taschenmonster t6 = new Taschenmonster("Mewoth", 5, 3);

        // instantiating trainers from class Trainer
        Trainer trainer1 = new Trainer("Paul");
        Trainer trainer2 = new Trainer("Chris");

        // adding Taschenmonster to both trainers
        trainer1.receive(0, t1);
        trainer1.receive(1, t2);
        trainer1.receive(2, t3);
        trainer1.receive(3, t4);
        trainer1.receive(4, t5);
        trainer1.receive(5, t6);

        trainer2.receive(0, t1);
        trainer2.receive(1, t2);
        trainer2.receive(2, t3);
        trainer2.receive(3, t4);
        trainer2.receive(4, t5);
        trainer2.receive(5, t6);

        // giving out profiles of Players
        System.out.println(trainer1);
        System.out.println(trainer2);


    }
}

Taschenmonster.java

import java.util.*;

public class Taschenmonster {


    // class attributes
    private String nameMonster;
    private int lives, damageValue;

    // getter and setter Methods for attributes

    /*
     * getter and setter for nameMonster
     */
    public String getNameMonster() {
        return this.nameMonster;
    }
    public void setNameMonster(String nameMonster) {
        this.nameMonster = nameMonster;
    }

    /*
     * getter and setter for lives
     */
    public int getLives() {
        return this.lives;
    }
    public void setLives(int lives) {
        this.lives = lives;
    }

    /*
     * getter and setter for damageValue
     */
    public int getDamageValue() {
        return this.damageValue;
    }
    public void setDamageValue(int damageValue) {
        this.damageValue = damageValue;
    }


    // constructor of class Taschenmonster
    Taschenmonster (String nameMonster, int lives, int damageValue) {
        this.nameMonster = nameMonster;
        this.lives = lives;
        this.damageValue = damageValue;
    }


    /*
     * how much lives is remaining with Taschenmonster
     */
    public void receiveDamage() {
        this.lives--;
        if (this.lives == 0) {
            System.out.println("Caution! No lives left.");
        }
    }

    /*
     * gives out estimated attackValue of Taschenmonster in form of double. 
     */
    public int attackValue() {
        Random random = new Random();
        return this.damageValue *= random.nextInt() % 2;
    }

    /*
     * Overriding toString() Method and values of object 
     */
    @Override
    public String toString() {
        return nameMonster + " " + lives + " " + damageValue;
    }


}

問題

顯示的編譯器錯誤抱怨在您的類中松散懸掛的方法調用 類中的這些方法調用必須位於可執行塊內,例如static { }public String toString() { }

在塊內意味着在花括號內,例如:

void method {
  // inside a block
  callOtherMethod();
}

打印類的字段

要打印出培訓師( Arena類的字段),您可以向該類添加一個實例方法。 例如public void printTrainers() {}

在其中添加一個像System.out.println()這樣的打印調用。 作為此方法調用的參數,傳遞trainer1字段或顯式表達式trainer1.toString() ,甚至更長this.trainer1.toString()

然后你可以從外部(例如在你的 main 中)調用該方法(它應該是public ),例如: arena.printTrainers(); .

代碼示例:

public class Arena {

    private Trainer trainer1;
    private Trainer trainer2;

    // constructor of class Arena
    Arena (Trainer trainer1, Trainer trainer2) {
        this.trainer1 = trainer1;
        this.trainer2 = trainer2;
    }

    public void printTrainers() {
        // giving out the profile of the trainers

        System.out.println(this.trainer1.toString());

        // this.trainer2.toString();
        System.out.println(trainer2); // equal result: calls toString implicitly
    }

}

更多景點

您還可以直接從您的主要方法打印培訓師。 因此,它們必須像變量一樣可訪問。

✔️ 它將像您的代碼中看到的那樣工作:

// previous class lines omitted

    public static void main(String args[]) {  // executable-BLOCK begins

        // instantiating trainers from class Trainer
        Trainer trainer1 = new Trainer("Paul");  // declaration can also be outside the method- or executable-block
        Trainer trainer2 = new Trainer("Chris");

        // giving out profiles of Players
        System.out.println(trainer1);        // INSIDE the executable-block: valid invocation OK 
        System.out.println(trainer2);

    }  // executable-BLOCK ends

// further class lines omitted
}

⚠️ 警告:標題評論指出Players但您正在打印Trainers

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM