Java 从对象中删除值';s集

Java 从对象中删除值';s集,java,Java,虽然标题并不像我希望的那样具有描述性。我将在这里更深入地解释这个问题。如果有帮助的话,这个问题与一个简单的数独游戏有关 假设我们有一个包含一些对象的二维数组。 该对象将包含一些值和一组包含该对象的值可以继承的可能值 假设网格已经填充,并且它通过了数独游戏的初始条件(例如,没有两行或两列可以包含相同的值)。现在我们必须为每个对象设置可能的值 这就是我遇到问题的地方。我的做法如下: 遍历网格并从(行、列)中获取对象值 将此值存储在某个变量中。让我们称之为价值 从具有相同列#的每个对象集合和具有相同行

虽然标题并不像我希望的那样具有描述性。我将在这里更深入地解释这个问题。如果有帮助的话,这个问题与一个简单的数独游戏有关

假设我们有一个包含一些对象的二维数组。 该对象将包含一些值和一组包含该对象的值可以继承的可能值

假设网格已经填充,并且它通过了数独游戏的初始条件(例如,没有两行或两列可以包含相同的值)。现在我们必须为每个对象设置可能的值

这就是我遇到问题的地方。我的做法如下:

  • 遍历网格并从(行、列)中获取对象值
  • 将此值存储在某个变量中。让我们称之为价值
  • 从具有相同列#的每个对象集合和具有相同行#的每个对象集合中删除值
  • 当我试图打印所有对象的集合时,它返回一个空集合。 在尝试调试这段代码时,我意识到由于某些原因,正在从所有对象中删除值,而不仅仅是从具有相同行和相同列的对象中删除值

    下面是代码

    公共类单元格{
    公共价值观;
    可能的公共设置;
    公共单元格(int值){
    这个值=值;
    this.mablue=新的HashSet();
    }
    }
    //在主课上。
    int size=4;
    单元格[][]网格=新单元格[大小][大小];
    Set可能=新的HashSet();
    可能的。添加(1);
    可能的。添加(2);
    可能。添加(3);
    增加(4);
    字符串[]sample={“1..2”、“.4.”、“.1..”、“.3.”;
    对于(int row=0;row
    错误在于您试图分配集合的代码:

    Set<Integer> possible = new HashSet<>();
    
    // ...
    
    for(int row = 0; row < size; row++){
       for(int col = 0; col < size; col++){
           // ...
           grid[row][col].possible = possible;
       }
    }
    

    然后,每个单元格仍然有一个不同的集合,它们可以容纳不同的内容。

    “假设……循环将用一组可能的值填充对象,范围从1到n,其中n是大小。”我不想假设-您没有向我们显示代码,如果在你的移除算法之后这些集合是空的,那么我们不能排除在它之前它们是空的。请编辑问题,使其包含最小的可重复示例。您的
    单元
    类的构造函数中还有一个小错误;您没有为字段赋值,因为构造函数参数会对同名字段进行阴影处理,并且您没有编写
    this.value
    mable.value
    来赋值。因此,我很惊讶您的代码能够在不存在集合的情况下运行而不抛出NullPointerException调用
    remove
    。好了,我尝试在您的注释之前创建一个可重复性最低的示例,并创建了一些错误。我修正了,使它与我的实际代码相匹配。错误确实存在于您刚刚编辑的代码中。谢谢您的澄清。我的印象是,通过引用“可能”,变量将保存“可能”的副本。我已经认识到我的错误。谢谢。这是一个常见的误解,由于同样的错误,很多人每天都会问关于堆栈溢出的问题!
    grid[row][col].possible.addAll(possible);