我正在为Android编写应用程序。我使用字符串数组从共享首选项中提取所有播放器名称(必须是字符串数组)。我有一个列表,可以从共享首选项中提取所有活跃的玩家(必须是一个列表)。我需要检查我的列表,看它是否包含任何不在我的播放器阵列中的播放器并删除它们。我似乎无法弄清楚逻辑。
例如:
列表包含: b C 一个 ë
数组包含: 一个 b C d
由于'e'存在于List中而不存在于Array中,因此需要从列表中删除'e'。我知道命令(.contains(),. remove(),for()),我只是无法弄清楚逻辑。
我的第一次尝试是:
for(int x=0;x<numOfPlayers;x++){
players[x] = getPrefs.getString("player"+Integer.toString(x), " ");
if(activePlayers.size()>0)
if(activePlayers.contains(players[x]))
playersChecked[x] = true;
else{
if(x<activePlayers.size())
activePlayers.remove(x);
}
}
但是如果播放器[x]有一个activePlayers没有的项目,这会从activePlayers中删除x,这很好。它需要反过来。
答案 0 :(得分:11)
答案 1 :(得分:1)
一个重要的一点会让你的生活变得困难,你的方法会产生不良后果。删除播放器将改变列表中的元素,以便最终跳过播放器。
例如,在列表中:
{A,B,C}
如果你删除B,你最终得到:
{A,C}
当x递增时,你最终得到x = 3,这曾经指向C.但现在它指向的是什么。
相反,请考虑使用迭代器。看到: Iterator in Java
这将允许您删除元素而不会破坏索引。
所以为了回答你的问题,我会在activePlayers上创建一个迭代器。在迭代时,只需根据列表检查迭代器中的每个项目,如果找不到则删除项目。