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