1
我正在试验按部件集成的实现方法,并试图从所有乘以一起的事物列表中抽出所有可能的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
它跳过U:x * COS(x) dv: SIN(x)
所以我的问题是,人有一个想法如何使它也解释了哪些部分不相邻的组合?该程序不会抛出任何错误,我只是不知道如何完成我所需要的。
谢谢。
什么'i'和'j'的值对应于你错过了呢? – John
为了让u有2个字符串,我必须是1,并且j只是递增它从开始计数的位置,即从索引j开始计数。 – Seva
我想那么问题是为什么你没有达到'我'和'j'的正确值。 (我试图帮助你解决你自己的问题;)) – John