代码之家  ›  专栏  ›  技术社区  ›  AznYouth

交换机中的新实例

  •  1
  • AznYouth  · 技术社区  · 7 年前

    我目前正在学习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:我是法国人,不介意变量名的含义;)

    提前感谢

    2 回复  |  直到 7 年前
        1
  •  1
  •   daniu    7 年前

    你可以这么做

    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();
    

    这之所以有效,是因为(我假设,这就是需要的情况)所有 Chien , Chat Furet 是的子类 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);
    
        2
  •  0
  •   Cedric    7 年前
        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() 使用构造器中已经提供的动物。