为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

当年话下 2023-08-09 17:02:04
我刚开始使用 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);        }    }}也许代码进入另一个值的中循环,但我没有找到任何其他值。
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

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



查看完整回答
反对 回复 2023-08-09
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信