首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用BitSet方法处理BitSet类型表?

如何使用BitSet方法处理BitSet类型表?
EN

Stack Overflow用户
提问于 2015-02-26 11:16:56
回答 2查看 69关注 0票数 0

我必须创建一个具有两个类型的BitSet维度(9x9)的表。我用位值从1到9来实现这个表。我希望提取一个特定情况的值(例如5),但是.set方法(int,boolean)修改了我图表中的所有框。

怎么做??

代码语言:javascript
复制
//create
private BitSet[][] solveur = new BitSet[9][9];

//init
BitSet BitInitialisation = new BitSet(); 
BitInitialisation.set(1, 10);

for (int ligne = 0; ligne < 9; ligne++) {
        for (int colonne = 0; colonne < 9; colonne++) {
            solveur[ligne][colonne] = BitInitialisation;
        }
    }

//read + method call 
for (int ligne = 0; ligne < 9; ligne++) {
    for (int colonne = 0; colonne < 9; colonne++) {
            AjusterLigne(ligne ,5);
    }
}

//method "AjusterLigne"

private void AjusterLigne(int ligne, int valeur) {
    for (int colonne = 0; colonne < GrilleSudoku.MAX; colonne++){
        solveur[ligne][colonne].set(valeur, false);
    }   
}

结果:空桌子..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-26 11:24:00

您已经创建了一个9x9的BitSet引用数组,但是将每个元素值设置为相同的引用--只涉及一个BitSet对象。这只是一个更复杂的版本:

代码语言:javascript
复制
StringBuilder builder = new StringBuilder();
StringBuilder[] array = { builder, builder };
array[0].append("foo");
System.out.println(array[1]); // Prints foo

如果确实需要81个独立的BitSet对象,则需要创建81个不同的BitSet对象:

代码语言:javascript
复制
for (int ligne = 0; ligne < 9; ligne++) {
    for (int colonne = 0; colonne < 9; colonne++) {
        BitSet bitSet = new BitSet();
        bitSet.set(1, 10);
        solveur[ligne][colonne] = bitSet;
    }
}

理解为什么会这样是非常重要的--这基本上是一个理解Java中引用和对象之间的区别的问题,值得花一些时间来确保您对它的了解.它很大程度上影响了您在Java中所做的一切。

票数 0
EN

Stack Overflow用户

发布于 2015-02-26 11:24:10

这是因为Java使用对象引用。

代码语言:javascript
复制
solveur[ligne][colonne] = BitInitialisation;

在这里,您在所有81个单元中指定了一个对BitInitialisation的引用。对其中任何一个的修改都会修改同一个对象。我可以提出两种解决办法:

  1. 您可以在内部循环的每一次迭代中创建新的BitSet。( @JonSkeet的回答涵盖了这一点。)
  2. 您可以在.clone()对象上调用BitSet方法。 solveur[ligne][colonne] = BitInitialisation.clone();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28741005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档