创建一个没有重复数字的宾果卡

时间:2016-01-22 13:06:20

标签: java

我需要帮助创建一个没有重复号码的宾果卡。我仍然是Java编程的新手。到目前为止,这是我提出的唯一想法。我非常感谢你的帮助。

import java.util.Arrays;
import java.util.Random;`
import static java.lang.System.out;

public class Exercise {

/**
 * @param args
 */
public static void main(String[] args) {
    Random rd = new Random();       
    int[][] bingo = new int[5][5];
    String title = "B\tI\tN\tG\tO";

    out.print(title);
    for (int i = 0; i < bingo.length; i++) {
        out.println();
        int num = 1;
        for (int idx = 0; idx < bingo[i].length; idx++) {
            if (i == 2 && idx == 2) {
                out.print("X\t");
                continue;
            }
            out.print(rd.nextInt(15)+ num + "\t");
            num += 15;
        }

    }

}

}

2 个答案:

答案 0 :(得分:2)

将尚未拍摄的数字存储在列表中,然后将其随机添加到卡中。添加数字时,将其从列表中删除,因此不会再次选择它。

像这样:

List<Integer> numbers = new ArrayList<Integer>() {{
    add(1);
    add(2);
    add(3);
    ...
    add(70);
}};

for (int x = 0; x < 5; x++) {
    for (int y = 0; y < 5; y++) {
        bingo[x][y] = numbers.get(numbers.remove(new Random().nextInt(numbers.size()));
    }
}

希望有所帮助。

答案 1 :(得分:1)

这样做的常用方法是填写一个包含您要使用的所有数字的列表,然后使用Collections.shuffle对其进行随机播放。

private static class Bingo {

    final int[][] card;

    public Bingo(int size) {
        // Create it.
        card = new int[size][size];
        // Fill it with 1, 2, ... by
        // First create my seed list of all numbers I want.
        List<Integer> seed = new ArrayList<>(size * size);
        for (int i = 0; i < size * size; i++) {
            seed.add(i+1);
        }
        // Shuffle it.
        Collections.shuffle(seed);
        // Fold it into my card.
        for (int i = 0; i < seed.size(); i++) {
            card[i / size][i % size] = seed.get(i);
        }

    }

    @Override
    public String toString() {
        return Arrays.deepToString(card);
    }

}

public void test() {
    Bingo bingo = new Bingo(5);
    System.out.println(bingo);
}