需求:一个模型中有n个状态,每个状态有m个选项,如果从每个状态中选取一个选项进行组合,总共有多少种组合。
1.State类
public class State {
/** 选项集合 */
private Listselections = new ArrayList();
/** 状态名称 */
private String mName;
public State(String name) {
this.mName = name;
}
public State() {
}
public String getName() {
return mName;
}
public void setName(String mName) {
this.mName = mName;
}
public void addSelection(String selection) {
selections.add(selection);
}
public String getSelection(int index) {
return this.selections.get(index);
}
public int selectionNum() {
return this.selections.size();
}
public ListgetSelections() {
return selections;
}
}
2组合类,Cmn
public class Cmn {
private Liststates = new ArrayList();
/**
* 数据初始化
*/
public Cmn(){
State state1 = new State("State1");
state1.addSelection("State1_Selection1");
state1.addSelection("State1_Selection2");
State state2 = new State("State2");
state2.addSelection("State2_Selection1");
State state3 = new State("State3");
state3.addSelection("State3_Selection1");
State state4 = new State("State4");
state4.addSelection("State4_Selection1");
state4.addSelection("State4_Selection2");
state4.addSelection("State4_Selection3");
addState(state1);
addState(state2);
addState(state3);
addState(state4);
}
private void addState(State state){
this.states.add(state);
}
/**
* 计算组合
*/
public void cmn(){
System.out.println("初始状态");
printState(this.states);
System.out.println("组合结果");
State state = new State("CMN");
int index = 0;
cmn(state,index);
printState(this.mPxStates);
}
/**保存组合结果*/
ListmPxStates = new ArrayList();
/**
* 递归寻找组合序列
* @param state
* @param index
*/
public void cmn(State state,int index){
State stateT = this.states.get(index);
Listselections = stateT.getSelections();
int sNum = selections.size();
for (int i = 0; i < sNum; i++) {
String selection = selections.get(i);
State state2 = new State(); //保存上一个state信息并添加当前selection
state2.getSelections().addAll(state.getSelections());
state2.addSelection(selection);
if(index+1 == this.states.size()){//找到一个组合序列
state2.setName("CMN "+(mPxStates.size()+1));
mPxStates.add(state2);
}else{//继续找
int index2 = index+1;
cmn(state2,index2);
}
}
}
public void printState(Liststates){
int num = states.size();
for (int i = 0; i < num; i++) {
State state = states.get(i);
Listselections = state.getSelections();
System.out.println("----------"+state.getName()+"-----------");
int num2= selections.size();
for (int j = 0; j < num2; j++) {
String selection = state.getSelection(j);
System.out.println(j+"----->"+selection);
}
System.out.println();
}
}
}3 Main
public class Main {
public static void main(String[] args){
new Cmn().cmn();
}
}