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

标签 java loops infinite-loop

我刚开始接触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);
        }
    }
}

也许代码进入了另一个值的 inf-loop,但我没有找到任何其他值。

最佳答案

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

关于java - 程序仅以特定值进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57997839/

相关文章:

java - Android/Firebase : Glide not working inside one of my fragments

javascript - 请,需要帮助循环 Javascript 事件

reactjs - 错误 : Maximum update depth exceeded. 当组件在尝试 setState 时重复调用...无限循环时,可能会发生这种情况

C++数字猜谜游戏 - 来自if语句的循环文本墙

python - 如何防止两个互相更新的小部件出现无限循环?

java - 将服务器上的 UTC 日期转换为本地时间

java - 为 JPanel 设置灵活的大小

java - 和引擎库上的颜色设置

vba - Excel VBA 多个循环与循环内的变量

java - Java 中是否有嵌套循环的最大数量?