我正在尝试按部分实现集成,并试图从所有相乘的事物列表中提取所有可能的配对u
。dv
提供的代码是我的方法,除了 Function 对象已替换为字符串以提高可读性,以便人们可以脱离上下文运行它。
ArrayList<String> funcObjects = giveList(CALC.MULTIPLY, function);//populate this any way you like
//all the pairs are stored in a matrix
int pairCounter = 0;
String[][] udvPairs = new String[funcObjects.size() * funcObjects.size()][2];
//for (int skip = 0; skip < 1; skip++) {
//commented out for sake of a better solution
for (int i = 0; i < funcObjects.size() - 1; i++) {
System.out.println("i=" + i);
//System.out.println(function.size());
for (int j = 0; j < funcObjects.size() - i; j++) {
System.out.println("j=" + j);
CalcObject u = "1";
CalcObject dv = "1";
for (int start = j; start <= j + i; start++) {
//this loop here is what is generating my u.
//note that it goes in order and therefore cannot
//account for items that are not next to each other in the list
//my question is how to add a fix for this
u = u + " * " + funcObjects.get(start);
}
for (int end = 0; end < j; end++) {
dv = dv + " * " + funcObjects.get(end);
}
for (int end = j + i + 1; end < funcObjects.size(); end++) {
dv = dv + " * " + funcObjects.get(end);
}
System.out.println("Pair " + pairCounter + "; u: " + u.toString() + " dv: " + dv.toString());
udvPairs[pairCounter][0] = u;
udvPairs[pairCounter][1] = dv;
pairCounter++;
}
}
到目前为止,这是我的代码。它给我的组合是正确的,但它并没有给我所有的组合。例如:
x * SIN(x) * COS(x)
即传入的列表["x","SIN(x)","COS(x)"]
会给我
i=0
j=0
Pair 0; u: x dv: SIN(x) * COS(x)
j=1
Pair 1; u: SIN(x) dv: x * COS(x)
j=2
Pair 2; u: COS(x) dv: x * SIN(x)
i=1
j=0
Pair 3; u: x * SIN(x) dv: COS(x)
j=1
Pair 4; u: SIN(x) * COS(x) dv: x
它正在跳过你:x * COS(x) dv: SIN(x)
所以我的问题是,任何人都知道如何让它也考虑到部件不相邻的组合?该程序没有抛出任何错误,我只是不知道如何完成我需要的实现。
谢谢。