Logi c для объединения двух наборов значений в ArrayList с дублированием - PullRequest
0 голосов
/ 01 мая 2020

Я сбит с толку логикой c программирования этого. Я уверен, что это очень просто.

Итак, у меня есть ArrayList<String> со значениями A, B, C, D, E, F, G. Индексируется в указанном порядке.

Я хотел бы случайным образом выбрать уникальную букву для каждого, но без дублирования.

Вывод будет выглядеть примерно так:

A:B
B:A
C:E
D:F
E:C
F:D

Я пытался перетасовать ArrayList, а затем переместить индекс на два, но не мог придумать, как предотвратить дублирование, и также случайным образом выбирая индексы, затем объединяя их в пару, но это работает только с четными числами.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Это должно быть все, что вам нужно:

ArrayList<String> list = // your list containing the values

ArrayList<String> shuffled = new ArrayList<>(list);
Collections.shuffle(shuffled);

Это даст вам секунду ArrayList<String>, которая содержит все значения list в случайном порядке без дубликатов.

0 голосов
/ 01 мая 2020
class Solution
{
    public static class Pair
    {
        public String a;
        public String b;

        public Pair(String a,String b)
        {
            this.a=a;
            this.b=b;
        }

        @Override
        public boolean equals(Object o)
        {
            if((this.a.equals(o.a))&&(this.b.equals(o.b)))
            {
                return true;
            }
            if((this.b.equals(o.a))&&(this.a.equals(o.b)))
            {
                return true;
            }
            return false;
        }

        @Override
        public String toString()
        {
            return a+":"+b;
        }
    }
    public static void main(String args[])
    {
        ArrayList<String> list=new ArrayList<String>();
        ......
        .....
        ......
        //list now contains {A,B,C,D,E,F,G}
        Set<Pair> letterset=new HashSet<Pair>();
        for(int i=0;i<list.size();i++)
        {
            for(int j=0;j<list.size();j++)
            {
                Pair pair=new Pair(list.get(i),list.get(j));
                letterset.add(pair);
            }
        }
        Iterator<Pair> iter=letterset.iterator();
        while(iter.hasNext())
        {
            System.out.println(iter.next());
        }
    }
}

Здесь 1. Пара: это класс, который содержит две буквы a и b, если два объекта совпадают, они считаются равными, как реализовано в функции equals ()
2. letterset: set был создан для удаления дубликатов объектов. 3. вложенный l oop создан для создания пар

Надеюсь, это то, что вы хотели.

...