我有一个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);
}
}
答案 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()包含区分大小写的输入。