java - Arraylist toString() 方法和重复值

标签 java arraylist contains

下面我贴出了我在尝试以非常简单的方式复制扫雷游戏时编写的代码片段。我有一个小问题...

下面的代码生成一对坐标,检查特定坐标是否已经保存在 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),并坚持下去。例如,使用 Strings:

if (!(mines.contains(str.toString()))) {
    mines.add(str.toString());
    mineCount++;
}

关于java - Arraylist toString() 方法和重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31908344/

相关文章:

java - 如何在jFugue中演奏平行旋律Pattern?

java - BlackBerry Web 服务 JSON 解析

java - 如何从Java数组列表中消除空的csv记录?

c# - 在 linq 中使用包含

java - 如何在 GWT 中居中弹出/对话框窗口?

java - 路径 [/jaagrut] 上下文中 servlet [com.jagrut.GroupServlet] 的 Servlet.service() 抛出异常

Java:从 ArrayList 引用数组作为方法输入

java - 计算所有字符序列

java - 为什么我的 contains 函数没有检测到该元素?

JQuery:使包含不区分大小写