生成随机数字对,没有重复

时间:2015-06-15 09:19:53

标签: java arrays random combinations

我必须使用整数数组:

int[] a={1,2,3,4,5};
int[] b={6,7};

我想生成一个数组,它包含来自a和b数组的对,按随机顺序,没有重复。例如,我想得到以下结果:

c={(1,6),(2,7),(4,6),...}

谢谢!

4 个答案:

答案 0 :(得分:3)

以下是一些代码,可以从输入的a[]b[]数组创建10个随机对,并将它们存储到HashSet中,您可以在以后根据需要使用它们。 HashSet会自动删除重复的对。

public class Pair {
    int x;
    int y;

    public Pair(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Pair otherPair = (Pair) obj;
        if (this.getX() != otherPair.getX() || this.getY() != otherPair.getY()) {
            return false;
        }

        return true;
    }

    // getters and setters
}

public class PairTest {
    public static void main(String[] args) {
        Random randomGenerator = new Random();

        int[] a={1,2,3,4,5};
        int[] b={6,7};

        Set<Pair> pairs = new HashSet<Pair>();

        do {
            int xRand = randomGenerator.nextInt(a.length);
            int yRand = randomGenerator.nextInt(b.length);

            Pair p;
            if (xRand % 2 == 0) {
                Pair p = new Pair(a[xRand], b[yRand]);
            }
            else {
                Pair p = new Pair(b[yRand], a[xRand]);
            }
            pairs.add(p);
            if (pairs.size() == 10) break;
        } while (true);
    }
}

答案 1 :(得分:2)

    int[] a={1,2,3,4,5};
    int[] b={6,7};
    List<int[]> list = new ArrayList<>();
    for (int i = 0; i < a.length; ++i)
        for (int j = 0; j < b.length; ++j)
            list.add(new int[] {a[i], b[j]});
    Collections.shuffle(list);

答案 2 :(得分:0)

我想这样的事情。我在Pair类和main的末尾添加了一个toString,以便您可以看到输出

import java.util.ArrayList;
import java.util.Collections;

class Pair {

    private Integer a;
    private Integer b;

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

    public Integer getA() {
        return a;
    }
    public void setA(Integer a) {
        this.a = a;
    }
    public Integer getB() {
        return b;
    }
    public void setB(Integer b) {
        this.b = b;
    }

    @Override
    public String toString() {
        return "Pair [a=" + a + ", b=" + b + "]";
    }


}

public class MainTest {

    public static void main(String[] args) {
        ArrayList<Pair> pairs = new ArrayList<Pair>();

        int[] a={1,2,3,4,5};
        int[] b={6,7};

        for (int i = 0; i<a.length; i++) {
            pairs.add(new Pair(a[i], b[(int) Math.round(Math.random())]));
        }
        Collections.shuffle(pairs);
        System.out.println(pairs);

    }

}

答案 3 :(得分:0)

如果一个随机数组对你来说足够好,这就是IMO最简单的方法:只需创建所有可能的对并对结果进行洗牌,只要a和{{1}就会产生宏大的随机性和唯一性包含唯一值。

b

如果您希望生成较少的对,即可能的总数量,那么有更有效的方法来生成所有对,然后只需要前几个。如果是这样,请写下评论。