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");
}