gpt4 book ai didi

java - 随机生成唯一字符的数组。现在知道更好的方法,但想知道为什么我原来的方法不起作用

转载 作者:行者123 更新时间:2023-12-01 22:22:50 26 4
gpt4 key购买 nike

我应该生成一个随机排序的字母表。我知道洗牌方法和 Fisher-Yates 洗牌算法之类的东西,但我最初尝试做的事情永远不会奏效。我有一个按常规顺序排列的字母表的“引用”数组。然后我将为每 26 个空格设置一个 for 循环。我会生成一个 0 到 25 之间的随机整数(用于引用数组中的索引)。然后,我会检查数组中是否已经包含该字符(它必须是唯一的)如果它是唯一的,我将其添加到数组中。但它仍然有重复项。这是我的代码:

public static final char[] ALPHABET = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', ' '};
public static char[] cipherGenerator(){
char[] cipherAlpha = new char[26];
for(int index = 0; index < 26; index++){

Random rand = new Random();
int newLetter = rand.nextInt(25);
char newChar = ALPHABET[newLetter];

while(Arrays.asList(cipherAlpha).contains(newChar)){
newLetter = rand.nextInt(25);
newChar = ALPHABET[newLetter];
}
cipherAlpha[index] = newChar;

}
return cipherAlpha;
}

尽管我尝试了一切方法来查找逻辑错误,但它返回的代码具有重复项。预先感谢您的帮助!

最佳答案

当您传递一个基本数组,例如 char[]Arrays.asList ,该方法无法返回 List<char> ,因为不允许将原始类型作为类型参数。但它可以而且确实产生 List<char[]> 。您的随意char永远不等于单个 char[]里面List ,所以任何重复的 char被允许。如果您使用Character[]而不是 char[]对于 cipherAlpha ,并将该方法的返回类型更改为 Character[] ,然后Arrays.asList将推断类型参数 Character正确,允许您的重复检查正常工作。

第二,nextInt(25)将生成 0 之间的随机索引和24 ,不是25 。您可以使用ALPHABET.length ,这里是 26。使用第一个更改但没有此更改,您将只有 25 个不同的字符,并且您永远找不到第 26 个不同的字符,永远循环。

关于java - 随机生成唯一字符的数组。现在知道更好的方法,但想知道为什么我原来的方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397834/

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