Java - Как проверить, содержит ли значение массива указанное значение в качестве атрибута - PullRequest
0 голосов
/ 05 марта 2019

У меня есть массив объектов Player.У игроков есть имена, и когда я добавляю игрока, я хочу проверить, существует ли имя игрока.Следующий код никогда не выдает исключение, он просто добавляет дубликаты игроков.

public void addPlayer(String name, boolean gender, int index)  throws RuntimeException {
    List<String> names = new ArrayList<>();

    if (names.contains(name))
        throw new DuplicatePlayerException();
    else {
        players[index] = new Player(name, gender);
        names.add(name);
    }
}

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Вы можете рассмотреть Set<Player> вместо массива.Set по определению не может содержать дубликаты.Предполагая, что Player реализовал equals/hashcode, ваш код может выглядеть следующим образом:

Set<Player> players = new HashSet<>();

public void addPlayer(Player player)  throws RuntimeException {
    if (!players.add(player)) {
        throw new DuplicatePlayerException();
    }
}

Set::add возвращает true, если набор еще не содержал элемент

0 голосов
/ 05 марта 2019
String Names = "John";
    if (Names.toLowerCase().contains("john")){
        System.out.println("yes");
    }

Вы также можете использовать .toLowerCase (). Contains () для включения чувствительных к регистру входов.

0 голосов
/ 05 марта 2019
public void addPlayer(String name, boolean gender, int index)  throws RuntimeException {
    List<String> names = new ArrayList<>(); // you create a new instance of the list each time you call it, so it'll always be empty

    if (names.contains(name)) // your empty list does not contain anything
        throw new DuplicatePlayerException();
    else {
        players[index] = new Player(name, gender);
        names.add(name);
    }
}

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

private List<String> names = new ArrayList<>();
public void addPlayer(String name, boolean gender, int index)  throws RuntimeException {
    if (names.contains(name))
        throw new DuplicatePlayerException();
    else {
        players[index] = new Player(name, gender);
        names.add(name);
    }
}

, чтобы содержимое names не стиралось при каждом вызове метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...