Java 对字符串进行刷毛,使其内没有对象';原址

Java 对字符串进行刷毛,使其内没有对象';原址,java,shuffle,Java,Shuffle,有没有一种方法可以使字符串数组在其原始位置上不出现任何字符串来洗牌?旋转不是一个选项您可以实现旋转,但在每次迭代时,将当前位置从随机范围中排除。这实际上降低了洗牌的质量 编辑:继续阅读,我发现它实际上有一个名称:。您可以实现一个,但在每次迭代中都会从随机范围中排除当前位置。这实际上降低了洗牌的质量 编辑:继续阅读,我发现它实际上有一个名称:。这只是一种方法。我确信有更快或更有效的方法,但这很好 static Random r; public static String[] shuffle(Str

有没有一种方法可以使字符串数组在其原始位置上不出现任何字符串来洗牌?旋转不是一个选项

您可以实现旋转,但在每次迭代时,将当前位置从随机范围中排除。这实际上降低了洗牌的质量

编辑:继续阅读,我发现它实际上有一个名称:。

您可以实现一个,但在每次迭代中都会从随机范围中排除当前位置。这实际上降低了洗牌的质量


编辑:继续阅读,我发现它实际上有一个名称:。

这只是一种方法。我确信有更快或更有效的方法,但这很好

static Random r;
public static String[] shuffle(String[] input)
{
    if(r == null) r = new Random();

    String[] output = new String[input.length];
    ArrayList<Integer> indices = new ArrayList<Integer>();

    for(int i = 0; i < input.length; i++) indices.add(i);

    for(int i = 0; i < output.length; i++)
    {
        int randomIndicesIndex = r.nextInt(indices.size());
        int randomIndex = indices.get(randomIndicesIndex);
        indices.remove(randomIndicesIndex);
        output[i] = input[randomIndex];
    }

    return output;
}

这只是一种方法。我确信有更快或更有效的方法,但这很好

static Random r;
public static String[] shuffle(String[] input)
{
    if(r == null) r = new Random();

    String[] output = new String[input.length];
    ArrayList<Integer> indices = new ArrayList<Integer>();

    for(int i = 0; i < input.length; i++) indices.add(i);

    for(int i = 0; i < output.length; i++)
    {
        int randomIndicesIndex = r.nextInt(indices.size());
        int randomIndex = indices.get(randomIndicesIndex);
        indices.remove(randomIndicesIndex);
        output[i] = input[randomIndex];
    }

    return output;
}

如果只有一个字符串,你怎么能这样做呢?如果你把第一个字符串移到最后,它们都不在原来的位置。这样行吗?如果数组“Hilda”中有两个元素,并且这两个元素被切换了呢?两个对象已切换,但值相同。可以接受吗?不,我希望是随机的。解决方案每次都必须不同,而且不可预测,而且轮换也不是一种选择。这被称为“错乱”。你可以尝试搜索“混乱算法”。如果只有一个字符串,你怎么做?如果你把第一个字符串移到最后,它们都不在原来的位置。这样行吗?如果数组“Hilda”中有两个元素,并且这两个元素被切换了呢?两个对象已切换,但值相同。可以接受吗?不,我希望是随机的。解决方案每次都必须不同,而且不可预测,而且轮换也不是一种选择。这被称为“错乱”。你可以尝试搜索“错乱算法”。这是使用某个著名的算法吗?@user3000837也许!不过我不知道。我肯定以前有人用过,但这只是我解决问题的方法。它使用稍多的内存(索引数组)来提高速度,但这并不能解决问题。我仍然有一些作业在同一个地方@TheAdamGaskins@user3000837你说:
不,我希望它是随机的。
不一定。它们不必总是处于不同的位置。
此代码片段满足这些要求。这是使用某个著名的算法吗?@user3000837可能!不过我不知道。我肯定以前有人用过,但这只是我解决问题的方法。它使用稍多的内存(索引数组)来提高速度,但这并不能解决问题。我仍然有一些作业在同一个地方@TheAdamGaskins@user3000837你说:
不,我希望它是随机的。
不一定。它们不必总是处于不同的位置。
此代码片段满足这些要求。