簡體   English   中英

Java-如何檢查數組的值是否包含指定值作為屬性

[英]Java - How to check if value of an array contains specified value as attribute

我有一個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);
    }
}
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的內容不會在每次調用方法時被刪除。

您可以考慮Set<Player>而不是array。 按定義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

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

您還可以使用.toLowerCase()。contains()包括區分大小寫的輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM