public void closureOneByOne(FcaMatrix matrix, FcaTree tree) { FcaObject nextObject = new FcaObject(); FcaTree node; do { do { nextObject = matrix.getElemById(tree.getNextId() + 1); if (nextObject != null) { FcaObjectSet q = new FcaObjectSet(); q = tree.getMainSet().clone(); q.closure(nextObject, matrix); FcaObjectSet dif =q.difference(tree.getMainSet()); if (dif.minObject() == nextObject) { node = new FcaTree(); node.setMainSet(q); listOfSets.Add(q); node.setNextId(q.maxObject().getId()); node.setParent(tree); tree.addDescendant(node); listOfNodes.Add(node); closureOneByOne(matrix, node); tree.setNextId(nextObject.getId()); } else { tree.setNextId(nextObject.getId()); } } } while (nextObject != null); if (tree.getParent() != null) tree = tree.getParent(); } while ((tree.getParent() != null) && (nextObject != null)); }