Как конвертировать Word в заданный номер - PullRequest
0 голосов
/ 23 января 2020

Здравствуйте, мне было интересно, как мне преобразовать слово типа "Герой" в заданное число?

if(Hero.equalsIgnoreCase("Steve")) {
        // turns string hero into Steve Attack value

    }
    else if(Hero.equalsIgnoreCase("Akiro")) {
        // turns string hero into Akiro Attack value

    }
    else if (Hero.equalsIgnoreCase("Big Willie")) {
        // turns string hero into Big WIllie Attack Value

    }
    else if (Hero.equalsIgnoreCase("Shourya")) {
        // turns hero into Shourya Attack value

    }

Ответы [ 4 ]

0 голосов
/ 23 января 2020

Правильно будет использовать Enum следующим образом:

public static void main(String[] args)
  {
    System.out.println(HERO.Akiro.getValue());
  }

  private enum HERO {
    Steve(1),
    Akiro(2),
    BigWillie(3),
    Shourya(4);

    private final int value;
    HERO(final int newValue) {
      value = newValue;
    }
    public int getValue() { return value; }
  }

Обрабатывать неизменяемые строковые литералы как enum.

0 голосов
/ 23 января 2020

Есть несколько способов сделать это.

Самый простой (и самый OOP) будет просто создать класс Hero и включить поле для повреждения, как таковое:

public class Hero {
    String name;
    int attackDamage;
}

Затем в своем коде вы должны:

  1. Создать список героев
  2. Искать в этом списке, чтобы найти того, у которого совпадает имя.
  3. Вернуть урон от атаки.

Например:

List<Hero> list = new ArrayList<>();
list.add(...);  // create a few heroes and add them to the list
...

String name = "hero name";

// now search for a hero and return their attack damage
int damage = list.stream()  // convert into a stream for easier searching
   .filter(hero -> hero.name.equalsIgnoreCase(name))  // find only heroes with the correct name
   .map(hero -> hero.attackDamage)  // get damage
   .findFirst()  // check if they exist
   .orElse(-1);  // return -1 if no hero found
0 голосов
/ 23 января 2020

Вы можете использовать что-то вроде HashMap с именами в качестве ключей и полномочиями в качестве значений.

HashMap<String, Integer> attackPowerMap = new HashMap<>();
attackPowerMap.put("Steve", 10);

И извлекать значения с помощью

int power = attackPowerMap.get("Steve") //Returns 10
0 голосов
/ 23 января 2020

Просто определите метод, который будет использовать оператор switch для проверки имени:

public int getHeroAttackValue(String heroName) {
    switch (heroName.toLowerCase()) {
        case "steve": {
            return /* Steve attack power */;
        }
        case "akiro": {
            return /* Akiro attack power */;
        }
        // etc.
    }
}

Или вы можете создать HashMap, который сопоставляет имя героя с его силой атаки:

HashMap<String, Integer> heroPowerMap = new HashMap<>();
heroPowerMap.put("Steve", steveAttackPower);
// etc.

тогда вы можете использовать:

int steveAttackPower = heroPowerMap.get("Steve");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...