首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何找到所有可能的字形?

如何找到所有可能的字形?
EN

Stack Overflow用户
提问于 2018-08-30 03:02:42
回答 1查看 581关注 0票数 -1

所以我想做一个字谜解码器,我想知道有没有更好的方法。我当前的代码是:

代码语言:javascript
复制
Random random = new Random();
char[] splitAnagram = chosenAnagram.toCharArray();
int[] presetNumbers = new int[chosenAnagram.length()];
int i = 0;
while (true) {
    TimeUnit.MILLISECONDS.sleep(10);
    int thisRandom = random.nextInt(chosenAnagram.length());
    if (Arrays.asList(presetNumbers).contains(thisRandom) == true)
        presetNumbers[i] = thisRandom;
    else
        continue;
    i++;
    if (i > chosenAnagram.length())
        break;
}
for (int l = 0; l < chosenAnagram.length(); l++) {
    System.out.println(splitAnagram[presetNumbers[l]]);
}

基本上,它为每个字母生成随机数,因此它将单词“打乱”。它是有缺陷的,因为它甚至不应该循环,只是让一个人混乱,但总的来说,它看起来真的很慢,很容易出错(我睡眠10ms,因为它只能在每次系统时间更改时生成随机数)。

我想知道是否有其他算法可以解决这个问题,或者是我可以使用的API。谢谢!

附注:我正在运行Eclipse Photon,如果你知道有什么插件的话。

EN

回答 1

Stack Overflow用户

发布于 2018-08-30 03:52:35

我从this Stackoverflow帖子中找到了一种使用Fisher--Yates Shuffle实现这一点的方法。下面是代码的结果:

代码语言:javascript
复制
@SuppressWarnings("unchecked")
private void beginDecoding(String chosenAnagram) throws InterruptedException {
    Random random = new Random();
    List madeAnagrams = new ArrayList();
    int factorial = 1;
    for (int i = chosenAnagram.length(); i > 0; i--) {
        factorial = i * factorial;
    }
    System.out.println(factorial);
    while (true) {
        if (madeAnagrams.size() == factorial) {
            break;
        }
        TimeUnit.MILLISECONDS.sleep(10);
        char[] splitAnagram = chosenAnagram.toCharArray();
        for (int i = chosenAnagram.length() - 1; i > 0; i--) {
            int index = random.nextInt(i + 1);
            char letter = splitAnagram[index];
            splitAnagram[index] = splitAnagram[i];
            splitAnagram[i] = letter;
        }
        String returnAnagram = new String(splitAnagram);
        if (!madeAnagrams.contains(returnAnagram)) {
            madeAnagrams.add(returnAnagram);
            System.out.println(returnAnagram);
        }
        else
            continue;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52084445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档