我的Minecraft插件有问题。我想将播放器的对象添加到列表中。在此之前,我想检查播放器是否已存在于我的列表中。
这里有一个例子:
public class Player{
public String playerName;
public int Count = 0;
public Player(String name){
playerName = name;
}
}
这里是主要课程:
public class mainClass{
List<Player> = PlayerList;
[...]
if(!(*An object with attribute examplename in List exist*)){
Player p = new Player("eamplename")
PlayerList.Add(p);
}
}
答案 0 :(得分:2)
我建议两种方法来解决你的问题。第一个是坚持使用List
的方法。
List<Foo> list = new ArrayList<Foo>();
boolean hasMyItem = false;
String newName = "hello world";
for (Foo foo : list) // iterate over each item in the list
{
if (foo.name.equals(newName))
{
hasMyItem = true;
break; // get out of for loop
}
}
if (!hasMyItem)
{
list.add(new Foo(newName));
}
else
{
// the player is already in the list ...
}
在此代码段中,我们迭代列表中的所有项目,直到我们发现该播放器已存在。如果您的列表中不存在此类播放器,则会以hasMyItem
的值false
退出,在这种情况下,您将新播放器添加到列表中。
迭代列表中的所有项目是一种常用的方法,这一点非常有用。但是,您可以考虑使用另一个名为Map<Key, Value>
的数据结构。 Map
将Key
与Value
相关联,并将其一起存储在地图中,就像列表一样。
您可以将Map<Key, Value>
视为标签项。 Key
是每个项目的标签。假设你的桌子上有一堆笔记本,你想要找到一个数学笔记。如果您知道数学笔记的唯一标签,例如封面上的某些文字或图像,您可以毫不费力地找到它。在您的示例中,Key
将是用户名,Value
将成为播放器。
Map
有什么好处?它提供了一种查找Key
值的简单方法。如果您使用Map
。
Map<String, Foo> map = new HashMap<String, Foo>();
Foo f1 = new Foo("name1");
Foo f2 = new Foo("name2");
Foo f3 = new Foo("name3");
map.put("name1", f1);
map.put("name2", f2);
map.put("name3", f3);
// will return true and this if statement will be executed
if (map.containsKey("name1"))
{
// will be executed
}
// will return false because you don't have and this if statement will not be executed
if (map.containsKey("some new name"))
{
// will not be executed
}
Map<K,V>
提供了其他有用的方法,可以找到here。
作为旁注,请尽可能将每个班级成员声明为private
,而不是default
(这时您没有指定任何内容)或public
。有很多关于为什么要这样做的讨论,但基本上是保护自己的代码免受其他人的影响。你可以很容易地搜索这个,但这里有一些链接。 Link1 Link2
我希望这可以给你一些很好的起点。
答案 1 :(得分:1)
由于有人指出我对Set
的使用不正确,我已决定使用另一种方法(仍使用重载的equals
方法)
public class Player{
public String playerName;
public int Count = 0;
public Player(String name){
playerName = name;
}
public boolean equals(Player p){
if(this==p) return true;
if(this.playerName.equals(p.playerName) return true;
return false;
}
和
public class mainClass{
ArrayList playerList;
public static void main(String[] args){
playerList = new ArrayList<Player>();
Player p = new Player("eamplename");
checkList(p);
}
//check Player object against list and add if not exist
//if desired, the returned boolean can confirm whether or not
//player was successfully added
public static boolean checkList(Player player){
for(Player p : playerList){
if(p.equals(player)) return false;
}
playerList.add(player);
return true;
}