猿问

程序仅以特定值进入无限循环

我刚开始使用 java,当时正在做一个关于排列的练习(该练习要求使用数组 a[] 创建 N 个元素的排列,满足 a[i] 不等于 i 的要求。)我创建了以下代码。在测试它时,我意识到有时当 N = 6 时它会进入无限循环。对问题出在哪里有什么想法吗?


public class GoodPerm {

    public static void main(String arg[]) {

        int n = Integer.parseInt(arg[0]);


        int[] guests = new int[n];

        for (int i = 0; i < n; i++) {

            guests[i] = i;

        }

        for (int i = 0; i < n; i++) {

            int r = i + (int) (Math.random() * (n - i));

            int q = guests[r];

            guests[r] = guests[i];

            guests[i] = q;

            if(guests[i] == i){

                i --;

            }

        }

        for(int q : guests){

            System.out.println(q);

        }

    }

}

也许代码进入另一个值的中循环,但我没有找到任何其他值。


当年话下
浏览 86回答 1
1回答

BIG阳

这段代码总是可以进入inf-loop。据我了解代码,您尝试做一些随机切换来实现您需要的结果。但是,如果数组的最后一个元素从未被切换过,则无法将其切换到任何“稍后/更高”的位置(因为没有更多的位置)。在第二个 for 循环的“最后”迭代中(因此i + 1 == n在开始时保持)r将始终评估,i因此不会发生真正的切换。如果最后一个元素仍然存在,你将永远重复这个过程。
随时随地看视频慕课网APP

相关分类

Java
我要回答