Hallo,
ich habe eine folgendes java-Programm gefunden und möchte es auf meine Wünsche anpassen. Das Programm sieht im Moment so aus:
Nun möchte ich statt String Integer nutzen. Das Programm soll weiterhin alle möglichen Varianten ausgeben, die folgendes Kriterium erfüllen. Die Summe der n Zahlen (Pro Liste eine Zahl) darf z.B. 600 nicht überschreiten. Das heißt alle Variaten, die dieses Kriterium erfüllen sollen ausgegeben werden.
Ich wäre sehr verbunden, wenn mir jemand weiterhelfen könnte!
ich habe eine folgendes java-Programm gefunden und möchte es auf meine Wünsche anpassen. Das Programm sieht im Moment so aus:
Java:
import java.util.*;
import static java.lang.System.*;
import static java.util.Arrays.*;
public class Main {
public static <T> Iterable<List<T>> finiteCartesianProduct(final List<Collection<T>> sets){
return new Iterable<List<T>>(){
private long size=1;
{
for(Collection<T> set:sets)size*=(long)set.size();
}
@Override
public Iterator<List<T>> iterator() {
return new Iterator<List<T>>(){
long counter=0;
ArrayList<T> currentValues=new ArrayList<T>(sets.size());
ArrayList<Iterator<T>> iterators=new ArrayList<Iterator<T>>(sets.size());
{
for(Iterable<T> set:sets){
Iterator<T> it=set.iterator();
iterators.add(it);
if(it.hasNext()){
currentValues.add(it.next());
}
}
}
@Override
public boolean hasNext() {
return counter<size;
}
@Override
public List<T> next() {
List<T> result=new LinkedList<T>(currentValues);
counter++;
increment(0);
return result;
}
private void increment(int i){
if(iterators.get(i).hasNext()){
currentValues.set(i,iterators.get(i).next());
}else{
iterators.set(i,sets.get(i).iterator());
currentValues.set(i,iterators.get(i).next());
if(i<iterators.size()-1){
increment(i+1);
}
}
}
@Override
public void remove() {
throw new UnsupportedOperationException("impossible to change combination set");
}
};
}
};
}
public static void main(String... args){
List<Collection<String>> lists = new LinkedList<Collection<String>>();
lists.add(asList("Pute","Hahnchen","Schwein"));
lists.add(asList("Salz","Pfeffer","Curry"));
lists.add(asList("Reis","Kartoffeln","Nudeln"));
for(List<String> x:finiteCartesianProduct(lists)){
out.println(x);
}
}
}
Nun möchte ich statt String Integer nutzen. Das Programm soll weiterhin alle möglichen Varianten ausgeben, die folgendes Kriterium erfüllen. Die Summe der n Zahlen (Pro Liste eine Zahl) darf z.B. 600 nicht überschreiten. Das heißt alle Variaten, die dieses Kriterium erfüllen sollen ausgegeben werden.
Ich wäre sehr verbunden, wenn mir jemand weiterhelfen könnte!