[英]Creating a list of arrays with positive and negative values from given set in Java
假设我有以下集合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个负值时,它可以工作。 我使用了两个for循环,如下所示
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;
}
}
看看是否可以帮助您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.