让我有以下设置A={1,2,3}
现在我想创建一个数组列表,使我的输出看起来像(如果我们只允许1个负值) {-1,2,3}, {1,-2,3}, {1,2,-3}
(如果仅允许2个负值) {-1,-2,3}, {-1,2,-3}, {1,-2,-3}
...等等。
到目前为止,我在有1个负值的时候尝试了,并且可以正常工作。我用两个用于以下
的循环ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>();
for (int j=0; j<neighbours.size(); j++)
{
outer.add(createDnf(neighbours, neighbours.get(j)));
}
protected ArrayList<Integer> createDnf(List<Integer> others, int dn) {
ArrayList<Integer> inner = new ArrayList<Integer>();
for (int j=0; j<others.size(); j++) {
if(others.get(j) == dn) {
inner.add(dn);
} else {
inner.add(-others.get(j));
}
}
return inner;
}
此处neighbours
包含与集A
相同的整数列表。我如何使其适用于2个或多个负值?
谢谢!
我创建了以下片段,它仅在您需要单个负数的情况下给出重复值,否则它正常工作:
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
public class MyClass {
public static void main(String args[]) {
ArrayList<Integer> negativeIndexList = new ArrayList<Integer>();
negativeIndexList.add(1);
negativeIndexList.add(2);
negativeIndexList.add(3);
negativeIndexList.add(4);
negativeIndexList.add(5);
System.out.println(returnPositiveNegativeArray(negativeIndexList,2));
}
private static ArrayList<ArrayList<Integer>> returnPositiveNegativeArray(List<Integer> inputList,int noOfNegativesInEachList) {
ArrayList<ArrayList<Integer>> rList = new ArrayList<ArrayList<Integer>>();
for(int index=0;index<inputList.size();index++) {
for(int j=index+1;j<inputList.size();j++) {
ArrayList<Integer> negativeIndexList = new ArrayList<Integer>();
negativeIndexList.add(index);
for(int k=j;k<inputList.size();k++) {
if(negativeIndexList.size()<noOfNegativesInEachList) {
negativeIndexList.add(k);
}
}
if(negativeIndexList.size()==noOfNegativesInEachList) {
ArrayList<Integer> innerList = new ArrayList<Integer>();
innerList.addAll(inputList);
for(int negativeIndex:negativeIndexList) {
innerList.set(negativeIndex,-innerList.get(negativeIndex));
}
rList.add(innerList);
}
}
}
return rList;
}
}
看看它是否可以帮助您..