开关中的新实例

New instance in switch

我目前正在学习 java 和 oop。 当我必须根据条件实例化一个新对象时遇到问题。每个对象都具有相同的类型。 根据情况,我想传递我的对象 playerAnimal 和 animalSauvage,以便让它们战斗。 (有点像玩家遇到凶猛的宝可梦)

switch (animalChosen) {
    case "Chien":
        Animaux playerChien = new Chien(animalName);
        playerChien.displayStat();
        break;
    case "Chat":
        Animaux playerChat = new Chat(animalName);
        playerChat.displayStat();
        break;
    case "Furet":
        Animaux playerFuret = new Furet(animalName);
        playerFuret.displayStat();
        break;
    default
        break;
}

switch (randAnimalSauvage()) {
    case "Chien":
        Animaux chienSauvage = new Chien();
        chienSauvage.displayStat();
        break;
    case "Chat":
        Animaux chatSauvage = new Chat();
        chatSauvage.displayStat();
        break;
    case "Furet":
        Animaux furetSauvage = new Furet();
        furetSauvage.displayStat();
        break;
    default:
        break;
}
Fight letsFight = new Fight(Animaux playerAnimal, Animaux animalSauvage);
letsFight.battle(Animaux playerAnimal, Animaux animalSauvage);

PS:我是法国人,不要介意变量名的含义;)

提前致谢

    Animaux chosenPlayerAnimal;

    switch (animalChosen) {
        case "Chien":
            chosenPlayerAnimal = new Chien(animalName);
            break;
        case "Chat":
            chosenPlayerAnimal = new Chat(animalName);
            break;
        case "Furet":
            chosenPlayerAnimal = new Furet(animalName);
            break;
        default:
            chosenPlayerAnimal = new SomeDefaultAnimal(animalName);
            break;
    }

    Animaux animalSauvage;

    switch (randAnimalSauvage()) {
        case "Chien":
            animalSauvage = new Chien();
            break;
        case "Chat":
            animalSauvage = new Chat();
            break;
        case "Furet":
            animalSauvage = new Furet();
            break;
        default:
            animalSauvage = SomeDefaultAnimal();
            break;
    }

    chosenPlayerAnimal.displayStat();
    animalSauvage.displayStat();

    Fight letsFight = new Fight(chosenPlayerAnimal, animalSauvage);
    letsFight.battle(chosenPlayerAnimal, animalSauvage);

我真的不明白你为什么要用你已经在构造函数中提供的动物调用 Fight.battle()

你可以做到

Animal animal= null;
switch (animalChosen) {
    case "Chien":
        animal = new Chien(animalName);
        break;
    case "Chat":
        animal = new Chat(animalName);
        break;
    case "Furet":
        animal = new Furet(animalName);
        break;
      default
        break;
 }
 animal.displayStat();

这是可行的,因为(我假设,这就是需要的情况)所有 ChienChatFuret 都是 Animal 的子类(或实现接口,无论它是什么)。

敌方动物也一样。由于这两种情况都相同,因此您可以创建一个函数。

private Animal byName(String animalName) {
    // same code as above, returning the animal
    return animal;
}

然后会这样调用:

Animal playerAnimal = byName(playerChoice);
Animal savageAnimal = byName(randAnimalSauvage());
Fight letsFight = new Fight(playerAnimal, savageAnimal);
letsFight.battle(playerAnimal, savageAnimal);