【发布时间】:2017-04-13 11:51:53
【问题描述】:
我的程序有问题。例如,我有 5 个字段。这些字段的值是 true 或 false。 False 字段可以被删除。所以我想找到这些字段的所有可能组合。
我的想法是:例如,我有一个包含这些字段的 XML
- 字段 1,正确
- 字段 2,正确
- 字段3,错误
- 字段 4,错误
- 字段5,错误
结果应该是:
{Field1, Field2, Field3, Field4, Field5}
{Field1, Field2, , Field4, Field5}
{Field1, Field2, , , Field5}
{Field1, Field2, , , }
{Field1, Field2, Field3, , Field5}
{Field1, Field2, Field3, , }
{Field1, Field2, Field3, Field4, }
{Field1, Field2, , Field4, }
8 种组合。
我的想法是,它可以用树结构来解决。我将检查当前字段是“真”还是“假”。如果“真”那么我将向前移动一个字段。如果该字段为“false”,我将复制 XML 并在列表中添加一次与当前“false”字段并没有它的一次。 就像这里的图片一样。
public List<List<Fieldmatrix>> permut(List<Fieldmatrix> matrix, int j) {
while (felderLaenge != j) {
if (!matrix.get(j).isTrue()) {
tmpL = iterateLeft(matrix, j);
tmpR = iterateRight(matrix, j);
} else {
tmpL = iterateRight(matrix, j);
}
j++;
return permut(tmpL, j);
}
return sammlung;
}
iterateLeft 表示删除,iterateRight 表示不删除。
我无法实现重复功能。所以我只有 4 个 Xmls 结果:{1,2,3,4,5}, {1,2,4,5}, {1,2,3,5}, {1,2,3,4}
有人可以帮我吗?
首先感谢您的支持。
Fieldmatrix-Class 看起来像:
public class Fieldmatrix {
private String feld;
private boolean pflicht;
public Fieldmatrix(String feld, boolean pflicht){
this.feld = feld;
this.pflicht = pflicht;
}
public String getFeld() {
return feld;
}
public void setFeld(String feld) {
this.feld = feld;
}
public boolean isPflicht() {
return pflicht;
}
public void setPflicht(boolean pflicht) {
this.pflicht = pflicht;
}
}
如何更改这部分“prefixWithField.add(?)” 您可以使用 String 处理它,这是因为 List 也是 String 类型。 但我和 List 一起工作 .
iterateRight() 仅使用控制台打印。 ieterateLeft() 删除当前字段并使用控制台打印。
【问题讨论】:
-
“我无法实现复制功能”是什么意思?
-
你为什么不简单地数数呢?您从一个配置开始,该配置本质上是每个用 true 初始化的字段的 bool,然后在其上应用一个运算符,搜索最正确的可删除元素,翻转它的值,每当它从 false 翻转为 true 时,它会继续在左边做那个。因为人们会计算一个二进制数,只有 0 和 1 颠倒并忽略不可删除的“数字”。也就是说,您的问题有些不清楚 - 您是在询问如何查找所有组合或如何复制 XML 的算法?
-
另外,我真的建议用英文命名。
-
这将有助于向我们展示
iterateLeft和iterateRight的实现。
标签: java combinations permutation