gpt4 book ai didi

java - 基于种子的伪随机序列发生器

转载 作者:行者123 更新时间:2023-12-01 09:02:58 25 4
gpt4 key购买 nike

我设法根据种子制作一个随机序列,但现在我正在尝试其他东西。基本上,它生成一个数字(基于种子),然后检查该数字是否已在数组中,如果不在数组中,则将其添加到数组中,如果在,则继续下一个。然而,我的程序工作正常,直到它达到 0,然后它就一直重复 0。这是我的代码:

public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("Enter a seed(One letter)");
String input = s.nextLine();
char a = input.charAt(0);
int b = ((int) a) - 96;
Random rnd1 = new Random(b);
int[] letters = new int[25];
boolean isSame = false;
for(int i = 0; i < 26; i++)
{
int c = rnd1.nextInt(26);
for(int x = 0; x < i; x++)
{
if(letters[x] == c)
{
isSame = true;
}
}
if(isSame == false)
{
letters[i] = c;
}
System.out.println(letters[i]);
}
}

最佳答案

将问题分解为几个部分,首先是测试 value 的方法在letters索引之间0p喜欢

private static boolean match(int[] letters, int p, int val) {
for (int i = 0; i < p; i++) {
if (letters[i] == val) {
return true;
}
}
return false;
}

然后是fill的方法一个int[]提供Random给定 length 。既然你想要 int[]为了独一无二,您可以使用内部 do while当下一个符号已经存在时循环。就像,

private static int[] fill(Random rnd1, int length) {
int[] letters = new int[length];
for (int i = 0; i < length; i++) {
int c;
do {
c = rnd1.nextInt(length);
} while (match(letters, i, c));
letters[i] = c;
}
return letters;
}

然后你可以调用它(你可以使用 Arrays.toString(int[]) )来输出数组,例如

public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("Enter a seed(One letter)");
String input = s.nextLine();
char a = input.charAt(0);
int b = ((int) a) - 96;
Random rnd1 = new Random(b);
int[] letters = fill(rnd1, 26);
System.out.println(Arrays.toString(letters));
}

关于java - 基于种子的伪随机序列发生器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41529041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com