Domanda

Come mescolare gli elementi nelle coppie?Il programma seguente genera tutte le coppie possibili e successivamente mescola le coppie.per esempio.possibili coppie prima dello shuffle ab,ac,ae,af..ecc mescolato a ac,ae,af,ab...eccetera

Come renderlo non solo mescolato in coppia ma all'interno degli elementi della coppia stessa?per esempio.invece di ab, ac, come posso fare ba, ac ?

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;
    }
}
È stato utile?

Soluzione

Non vi resta che mescolare la lista temp prima di aggiungerlo a pic2. Ecco il codice fisso (nota che ho girato la variabile pic2 in un campo della classe ListGenerator e ribattezzata a 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;
     }
  }

Tuttavia, questo è solo il primo passo verso una soluzione. Attualmente, ogni coppia conterrà numeri interi nella gamma [0..size-1] in modo che le coppie di simile a questa: <0,3>, <1,2>, ecc Che probabilmente si desidera è di ottenere una coppia che sono due lettere String quali: "ab", "dc", ecc In questa versione ho getList() rinominato getPairs() che trasmettono meglio il suo significato. Inoltre, ho fatto il costruttore di ListGenerator accetta un array di caratteri in modo che solo bisogno di chiamare con i tuoi caratteri desiderati, come segue:

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

E qui è ListGenerator è di per sé:

  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;
     }
  }

Altri suggerimenti

Diciamo che hai questi oggetti:

Red dress
Blue shirt
Pink panties

E vuoi mescolare sia i colori che gli articoli di abbigliamento per ottenere cose come:

Pink shirt
Blue panties
... etc

Come si fa?

È semplice, davvero:basta mescolare separatamente l'elenco dei colori e degli articoli di abbigliamento, quindi unirli nuovamente.

Red, Blue, Pink            -->  Pink, Blue, Red
dress, shirt, panties      -->  shirt, panties, dress
                               ------------------------ pair
                                Pink shirt
                                Blue panties
                                Red dress
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top