Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何检查数组的值是否包含作为属性的指定值_Java_Arrays_List - Fatal编程技术网

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

Java-如何检查数组的值是否包含作为属性的指定值,java,arrays,list,Java,Arrays,List,我有一个玩家对象数组。 球员有名字,当我添加球员时,我想检查球员名字是否已经存在。下面的代码从不抛出异常,它只是添加了重复的播放器 public void addPlayer(String name, boolean gender, int index) throws RuntimeException { List<String> names = new ArrayList<>(); if (names.contains(name))

我有一个玩家对象数组。 球员有名字,当我添加球员时,我想检查球员名字是否已经存在。下面的代码从不抛出异常,它只是添加了重复的播放器

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);
    }
}
要使用实例级列表,您需要更改方法:

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);
    }
}
因此,每次调用方法时,名称的内容都不会被删除。

可以考虑SET而不是数组。“按定义设置”不能包含重复项。假设Player实现了equals/hashcode,您的代码可能如下所示:

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

public void addPlayer(Player player)  throws RuntimeException {
    if (!players.add(player)) {
        throw new DuplicatePlayerException();
    }
}
如果集合中尚未包含元素,则返回true

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

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

什么是播放器[index]?此行中的问题列表名称=新的ArrayList;每次创建新的ArrayList时。因为每次创建空的新列表名时。它应该是一个类级变量使用布尔值表示性别是上个世纪的事。。。名称不能包含方法中的给定名称,因为在检查名称是否包含的if语句之前,该名称始终为空。让它成为一个类属性…即使这确实是一个好的评论,如果他使用了集合而不是列表,他仍然会有相同的结果problem@Stultuske我建议使用Set而不是数组。我的回答中没有列表我指的是OP的代码,他在那里使用了一个列表。在您的回答中,您修复了他的错误,但您没有提到这一点,您只解释了在修复错误后使用集合的好处这将是一个很好的评论,但与OP遇到的实际问题无关。
String Names = "John";
    if (Names.toLowerCase().contains("john")){
        System.out.println("yes");
    }