Java-如何检查数组的值是否包含指定值作为属性

时间:2019-03-05 09:38:30

标签: java arrays list

我有一个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 :(得分:9)

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的内容不会在每次调用方法时被删除。

答案 1 :(得分:1)

您可以考虑使用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

答案 2 :(得分:0)

String Names = "John";
    if (Names.toLowerCase().contains("john")){
        System.out.println("yes");
    }

您还可以使用.toLowerCase()。contains()包含区分大小写的输入。