Frage

Wie die Elemente in den Paaren mischen? Das folgende Programm, erzeugen alle möglichen Paare und später die Paare mischen. z.B. mögliche Paare vor shuffle ab,ac,ae,af..etc Shuffled zu ac,ae,af,ab ... etc

Wie es nicht nur paarweise gemischt zu machen, aber innerhalb der Elemente in dem Paar selbst? z.B. statt ab, ac, wie kann ich ba, ac machen?

String[] pictureFile   = {"a.jpg","b.jpg","c.jpg","d.jpg","e.jpg","f.jpg","g.jpg"};
    List <String>  pic1= Arrays.asList(pictureFile);
    ...
ListGenerator pic2= new ListGenerator(pic1);

ArrayList<ArrayList<Integer>> pic2= new ArrayList<ArrayList<Integer>>();


public class ListGenerator {
    public ListGenerator(List<String> pic1) {
     int size = pic1.size();

     // create a list of all possible combinations
     for(int i = 0 ; i < size ; i++) {
        for(int j = (i+1) ; j < size ; j++) {
           ArrayList<Integer> temp = new ArrayList<Integer>();
           temp.add(i);
           temp.add(j);
              pic2.add(temp);
            }
        }
      Collections.shuffle(pic2);
    }

    //This method return the shuffled list
    public ArrayList<ArrayList<Integer>> getList()  {
         return pic2;
    }
}
War es hilfreich?

Lösung

Sie müssen nur die temp Liste mischen, bevor Sie es zu pic2 hinzufügen. Hier ist der feste Code (beachten Sie, dass ich die pic2 Variable in ein Feld der ListGenerator Klasse drehte sich um und benannte sie in result)

  String[] pictureFile   = {"a.jpg","b.jpg","c.jpg","d.jpg","e.jpg","f.jpg","g.jpg"};
  List <String>  pic1= Arrays.asList(pictureFile);
      ...
  ListGenerator pic2= new ListGenerator(pic1);

  public class ListGenerator {

     ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();

     public ListGenerator(List<String> pic1) {
        int size = pic1.size();

        // create a list of all possible combinations
        for(int i = 0 ; i < size ; i++) {
           for(int j = (i+1) ; j < size ; j++) {
              ArrayList<Integer> temp = new ArrayList<Integer>();
              temp.add(i);
              temp.add(j);

              Collections.shuffle(temp);
              result.add(temp);
           }
        }
        Collections.shuffle(result);
     }

     //This method return the shuffled list
     public ArrayList<ArrayList<Integer>> getList()  {
        return result;
     }
  }

Dies ist jedoch nur der erste Schritt in Richtung einer Lösung. Derzeit jedes Paar ganze Zahlen im Bereich [0..size-1] enthalten, so dass Ihre Paare wie folgt aussehen: <0,3>, <1,2> usw. Was Sie wahrscheinlich wollen ein Paar bekommen, die aus zwei Buchstaben bestehenden String wie sind: "ab", "dc" usw. In dieser Version I umbenannten getList() zu getPairs() die besser seine Bedeutung vermitteln. Auch machte ich den Konstruktor von ListGenerator eine Reihe von Zeichen akzeptieren, so dass Sie es einfach anrufen müssen mit dem gewünschten Zeichen, wie folgt:

  List<String> pairs = new ListGenerator('a', 'b', 'c', 'd', 'e', 'f', 'g').getPairs();

Und hier ist ListGenerator es sich von selbst:

  public class ListGenerator {

     ArrayList<String> result = new ArrayList<String>();

     public ListGenerator(char...  letters) {
        int size = letters.length;

        // create a list of all possible combinations
        for(int i = 0 ; i < size ; i++) {
           for(int j = (i+1) ; j < size ; j++) {
              ArrayList<Character> temp = new ArrayList<Character>();
              temp.add(letters[i]);
              temp.add(letters[j]);

              Collections.shuffle(temp);
              result.add("" + temp[0] + temp[1]);
           }
        }
        Collections.shuffle(result);
     }

     //This method return the shuffled list
     public ArrayList<ArrayList<Integer>> getPairs()  {
        return result;
     }
  }

Andere Tipps

Angenommen, Sie haben diese Objekte:

Red dress
Blue shirt
Pink panties

Und Sie wollen beide die Farben und die Artikel von Kleidung mischen, um Dinge wie:

Pink shirt
Blue panties
... etc

Wie Sie es tun?

Es ist wirklich ganz einfach. Nur mische die Liste der Farben und Gegenstände der Kleidung getrennt, und sie dann wieder beitreten

Red, Blue, Pink            -->  Pink, Blue, Red
dress, shirt, panties      -->  shirt, panties, dress
                               ------------------------ pair
                                Pink shirt
                                Blue panties
                                Red dress
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top