提问人:JG2022 提问时间:3/12/2023 更新时间:3/12/2023 访问量:53
随机值 Java 的种子值输出问题
Issues with seed value output of randomized values Java
问:
我正在尝试在 java 中构建一个程序,用户插入一个值,并且数字达到该值,使用种子对值表进行伪随机化。例如,如果用户输入 5,程序将创建一个 5x5 的表,其中包含每个数字,直到一个重复,例如
在此之后,该表应由提示用户输入的另一个值进行伪随机化。我的问题是随机化的值不正确,如下图所示,数字范围为 1-5。当用户输入 5 时,并且被种子值 22 伪随机化。有人可以帮忙吗?谢谢。
这是我的代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class LabProgram {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
System.out.println("Please enter the number of elements to be paired.");
int input = scnr.nextInt();
// Initialize a 1D Array
int i = 0;
// Append duplicates of pair values 1-input
List<Integer> pairs = new ArrayList<>();
for (i = 1; i <= input; i++) {
// Adds value twice to the array
pairs.add(i);
pairs.add(i);
}
// Prints pairs into a table and creates a new line every fifth value
int count = pairs.size();
int newLine = 0;
for (i = 0; i < count; i++) {
int pair = pairs.get(i);
System.out.printf("%4d", pair);
System.out.print("");
newLine = newLine + 1;
if (newLine == 5) {
System.out.println("");
// Reset lineCount back to 0 to allow for new calc to occur
newLine = 0;
}
}
System.out.println();
System.out.println("Please enter a seed number for testing purposes.\n");
int seed = scnr.nextInt();
// Collections.shuffle(pairs, new java.util.Random(seed));
Random randomGeneratorName = new Random(seed);
// Print the pairs in a table with a max of 5 numbers per row
count = pairs.size();
newLine = 0;
int[] usedNumbers = new int[input];
int unusedNumbers = input * 2;
for (i = 0; i < count; i++) {
int index = pairs.get(i) - 1; // change index to start at 0
int number = index + 1; // change number to start at 1
if (usedNumbers[index] == 0) {
System.out.printf("%4d", number);
usedNumbers[index] = 1;
unusedNumbers--;
newLine++;
if (newLine == 5) {
System.out.println();
newLine = 0;
}
}
}
System.out.println();
}
}
答:
0赞
sorifiend
3/12/2023
#1
您非常接近解决方案。以下行是键,需要取消注释:
Collections.shuffle(pairs, new java.util.Random(seed));
你不需要玩,在你的最后一个循环中,你可以简单地使用与第一次完全相同的循环结构,因为所有的工作都为我们完成。使用您的代码,工作的最后一个循环可能如下所示:index
number
Collections.shuffle
Collections.shuffle(pairs, new java.util.Random(seed));
// Print the pairs in a table with a max of 5 numbers per row
newLine = 0;
for (i = 0; i < count; i++) {
int pair = pairs.get(i);
System.out.printf("%4d", pair);
System.out.print("");
newLine = newLine + 1;
if (newLine == 5) {
System.out.println("");
// Reset lineCount back to 0 to allow for new calc to occur
newLine = 0;
}
}
因此,有了这个输入:
5
22
我得到以下输出:
Please enter the number of elements to be paired.
5
1 1 2 2 3
3 4 4 5 5
Please enter a seed number for testing purposes.
22
1 4 1 5 3
2 3 5 4 2
评论
0赞
JG2022
3/13/2023
感谢您的解决方案,但您的输出不正确。当输入值为 5 且种子为 22 时,输出需要为: 请输入种子编号以进行测试。2 1 1 5 3 4 2 4 3 5
0赞
sorifiend
3/13/2023
@JG2022 如果你想要一个确切的输出,那么你不能使用 .我假设这是一个学校项目,如果是这样,那么你应该得到更多关于种子需要如何工作的信息,以及规则是什么,以便它每次都产生相同的输出。您将需要使用该种子信息自行创建逻辑。如需更多帮助,请编辑您的问题,以包含有关种子函数的额外信息。java.util.Random
评论