下面我贴出了我在尝试以非常简单的方式复制扫雷游戏时编写的代码片段。我有一个小问题...
下面的代码生成一对坐标,检查特定坐标是否已经保存在 ArrayList
中,如果没有,将它们添加到列表中,重复此过程直到我有十个矿区的 list 。在运行该程序时,我发现该列表包含重复项,而它不应该...
public class MineSweeper {
private static ArrayList mines;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
MineSweeper ms = new MineSweeper();
}
public MineSweeper(){
mines = new ArrayList(10);
generateMines();
showMines();
}
private void generateMines(){
int x = 0, y = 0, mineCount = 0;
Random rnd = new Random();
StringBuilder str = new StringBuilder();
while(mineCount != 10)
{
x = rnd.nextInt(9) + 1;
y = rnd.nextInt(9) + 1;
str.append(x).append(",").append(y);
if(!(mines.contains(str.toString())))
{
mines.add(str);
mineCount ++;
}
str = new StringBuilder();
}
}
private void showMines(){
System.out.println(mines.toString());
}
}
我相信我的 if 语句
会捕获任何重复项,但这是错误的。
我最终通过将 if 语句
更改为 if(!(mines.toString().contains(str)))
有人能告诉我区别吗?
最佳答案
您正在检查 mines
是否包含 str.toString()
,但添加 str
,这是一个 StringBuilder
实例。由于您要添加的所有对象都是 StringBuilder
,因此 mines
不能包含 String
。
你应该选择你要去的类(class),并坚持下去。例如,使用 String
s:
if (!(mines.contains(str.toString()))) {
mines.add(str.toString());
mineCount++;
}
关于java - Arraylist toString() 方法和重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31908344/