java - 创建一个数组,其中包含一定范围内的随机值

标签 java arrays random

大家!

我有一个任务是创建一个小程序来为彩票生成不同的赌注。我花了几个小时想知道应该在每个下注中创建具有不同数字的数组的代码片段。问题是,尽管我尝试减少重复,但我的代码仍然在矩阵的每一行中生成重复数字的赌注。 你认为我应该更深入地研究什么?

public static void main(String[] args) {


    //Ask the user how many lines of 15 numbers will be created
    System.out.print("How many lines should the matrix have? ");
    Scanner input = new Scanner(System.in);
    int numberOfLines = input.nextInt();


    //  Create the two-dimension array.
    int[][] numbers = new int[15][numberOfLines];
    for (int i = 0; i < numberOfLines; i++) {
        for (int j = 0; j < 15; j++) {
            boolean exist = false;
            do {
                numbers[j][i] = 1 + (int)(Math.random()*25);
                for (int k = 0; k < j; k++) {
                    if (numbers[j][i] == numbers[k][i])
                        exist = true;
                    else {
                        exist = false;
                    }
                }               
            } while (exist);
        }
    }

    //Sort the array
    int temp = 0;
    for (int i = 0; i < numberOfLines; i++){
        for (int j = 0; j < 15; j++) {
            for (int k = (j + 1); k < 15; k++)
                if (numbers[k][i] > numbers[j][i]) {
                    temp = numbers[j][i];
                    numbers[j][i] = numbers[k][i];
                    numbers[k][i] =  temp;
                }
        }
    }


    //Print the array
    System.out.println();
    for(int i = 0; i < numberOfLines; i++) {
        System.out.printf("Line %d:  ", (i+1));
        for (int j = 0; j < 15; j++){
            System.out.printf("%4d",numbers[j][i]);
        }
        System.out.println();
        System.out.println();

    }
    //System.out.println(numbers[0][1]);
    //System.out.println(numbers[1][0]);
}

}

最佳答案

如果您的主要问题是从较大的集合中选择一组不重复的数字,那么这里有一个简单的示例类可以实现这一点。每次调用 sample 时,都会对列表进行打乱并返回前 n 项。

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

class Lotto {
    private List<Integer> nums = new ArrayList<Integer>();

    // constructor
    public Lotto(int m) {
        // add m numbers to list
        for (int i=1; i <= m; ++i)
            nums.add(i);
    }

    public List<Integer> sample(int n) {
        // Randomly samples n integers from 1 to m without duplicates
        Collections.shuffle(nums);
        return nums.subList(0, 6);
    }
}

这是 DrJava's 中使用的类的示例交互选项卡:

> Lotto from40 = new Lotto(40)
> from40.sample(6)
[37, 2, 24, 30, 19, 29]
> from40.sample(6)
[17, 8, 16, 25, 33, 39]

关于java - 创建一个数组,其中包含一定范围内的随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817374/

相关文章:

java - 在 Spring MVC appcontext.xml 文件中配置两个 mongodb 实例?

java - ArrayIndexOutOfBounds 但数组大小设置正确

java - 使用picasso时如何清空ImageURL?

无法将 char 数组分配给我的结构数组的第三个槽

javascript - 使用 for 循环追加数组

java - 在 SpringBoot 应用程序中使用 Java 的简单日志记录外观

java - 随机数生成器在创建新对象时返回相同的结果

java - 如何从数据库中获取 10 条记录的随机范围而不与结束边界重叠?

python - 从均匀分布python生成随机数的最快方法

java - 尝试创建数组时出现堆栈溢出错误