随机值 Java 的种子值输出问题

问题描述 投票:0回答:1

我正在尝试在 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();

}

}

java arrays random seed
1个回答
0
投票

你已经非常接近解决方案了。下面一行是关键,需要取消注释:

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
© www.soinside.com 2019 - 2024. All rights reserved.