Datentypen Liste mit Integer

Record

Mitglied
Hallo,

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!
 
Ich bin mir nicht sicher ob ich das richtig verstanden habe, aber du kannst doch an Stelle eines Strings einfach ein Integer als Parameter übergeben.

Java:
List<Collection<Integer>> lists = new ...
 
Ich bin mir nicht sicher ob ich das richtig verstanden habe, aber du kannst doch an Stelle eines Strings einfach ein Integer als Parameter übergeben.

Java:
List<Collection<Integer>> lists = new ...

Da bekomme ich im Netbean eine Fehlermeldung

PS: Nehme alles zurück, das läuft.

Nun muss nur noch die letzte Bedingung in das Programm zu integrieren
 
Zuletzt bearbeitet:
Also hast du im Prinzip ein zweidimensionales Feld welches mit Nummern gefüllt ist und du sollst jetzt aus jeder Zeile eine Zahl nehmen und die Summer aller dieser Zahlen soll dann kleiner 600 sein.
Nun brauchst du ein Algorithmus, der jede Mögliche Kombination, die oben genannte Bedingung erfüllt, ausgibt, richtig ?

Hast du denn bisher einen Ansatz ?
 
Also hast du im Prinzip ein zweidimensionales Feld welches mit Nummern gefüllt ist und du sollst jetzt aus jeder Zeile eine Zahl nehmen und die Summer aller dieser Zahlen soll dann kleiner 600 sein.
Nun brauchst du ein Algorithmus, der jede Mögliche Kombination, die oben genannte Bedingung erfüllt, ausgibt, richtig ?

Hast du denn bisher einen Ansatz ?

Richtig, auf dem Punkt genau! Ich habe diese Matrix und möchte es mit diesen Programm auf die allmöglichen Varianten überprüfen.

VKO LED SVX KRR AER KUF OVB KJA
vko 0 125 170 150 165 130 265 305
led 125 0 195 190 205 165 285 320
svx 185 210 0 205 215 120 165 205
krr 165 205 205 0 80 155 295 340
aer 180 220 215 80 0 165 300 345
kuf 145 180 120 155 165 0 215 260
ovb 280 300 165 295 300 215 0 115
kja 320 335 205 340 345 260 115 0

Ich möchte dass alle Varianten von sechs summierten Zahlen, deren Ergebnis zwischen 1100<x<1200 liegen ausgegeben werden sollen.

Einen Ansatz finde ich leider nicht. Nebenbedingungen wären:
Wird ein Zahl z.B. aus der Spalte VKO gewält, kann der nächster Wert nicht aus der selben Spalte gewält werden.
Auch die 0-Werte dürfen nicht in betracht gezogen werden.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben