2017-05-08 80 views
2

这是PROGRAMM:算法组合

public List<List<Fieldmatrix>> permute(List<Fieldmatrix> fields, int start, List<Fieldmatrix> prefix) { 

    List<List<Fieldmatrix>> combinations = new ArrayList<>(); 

     if (start >= fields.size()) { 
      combinations.add(prefix); 
      return combinations; 
     } 
     String field = fields.get(start).getFieldName(); 
     if (fields.get(start).isMandatory() == false) { 
      combinations.addAll(combine(fields, start + 1, prefix)); 
     } 
     List<Fieldmatrix> prefixWithField = new ArrayList<>(prefix); 
     prefixWithField.add(new Fieldmatrix (field, fields.get(start).isMandatory(), fields.get(start).getFieldtype(), new ArrayList<>())); 
     combinations.addAll(combine(fields, start + 1, prefixWithField)); 

     return combinations; 
    } 

我的想法是:比如我有这些领域

  • 字段1的XML,真正
  • 字段2,真正
  • 字段3 ,假
  • Field4,false
  • Field5,false

的结果是:

  • {字段1,字段2,字段3,字段4,字段5}
  • {字段1,字段2,字段4,字段5}
  • {字段1,字段2,,,字段5}
  • {字段1,字段2,,,}
  • {字段1,字段2,字段3,字段5}
  • {字段1,字段2,字段3,,}
  • {字段1,字段2,字段3,字段4,}
  • {字段1,字段2,字段4,}

中的字段具有值真或假。假字段可以被删除。因此,该程序会查找这些字段的所有可能组合。

Fieldmatrix:

public class Fieldmatrix { 

private String fieldName; 
private boolean mandatory; 
private Type fieldtype; 
private List<Fieldmatrix> list = new ArrayList<>(); 

public Fieldmatrix(String fieldName, boolean mandatory, Type fieldtype, List<Fieldmatrix> list){ 
    this.fieldName = fieldName; 
    this.mandatory = mandatory; 
    this.fieldtype = fieldtype; 
    this.list = list; 
} 
//Getters and Setters 

此程序仅适用于“一维”列表,这意味着,如果任何领域有自己的列表中没有的字段。

我想更新此代码。 现在我有这样的结构:

  • 字段1,真
  • 字段2,真
  • 字段3,假
    • 子字段1中,真实
    • 子场2,真
      • 子子域1,假

子域1和子域2是场3 Subsubfield 1的列表是在子场2

我应该如何更改代码,使更多维的例子作品?

有没有人有想法?

回答

0

假设顺序并不重要,你可以用一种方式来生成(在你的情况,即FALSE PARAMS)可选的所有组合如下:

比方说,你有3个可选的参数,可以和2个强制性PARAMS 。 所以你会有3^2 = 9的组合。

现在,您只需重复9次即可生成所有可能的组合。

只是一个伪代码:

你的选择:[ “A”, “B”, “C”] 3^2 = 9点的可能性。

for(i=0;i<9;i++){ 
    for(j=0;j<options.length;j++){ 
    if(j'th bit is set in 'i') 
     print(options[j]); 
    } 
} 

您可以谷歌检查特定位设置与否。

希望这足以让你开始。 一切顺利。

+0

订单很重要。问题是我必须更新算法,以便它与每个字段的列表一起工作。 – mrfsl

+0

我的不好,这个算法会给你相同的输出。只需要在代码中进行一些处理以适应TRUE值。你应该试试看。 –

+0

但与algorothm我已经容纳真正的价值观,问题是我不能处理f.e. Fields3.list和Subfield2.list。 – mrfsl