java - 程序仅以特定值进入无限循环
问题描述
我刚开始使用 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 循环,但我没有找到任何其他值。
解决方案
此代码始终可以进入 inf 循环。据我了解代码,您尝试进行一些随机切换以实现所需的结果。但是如果你的数组的最后一个元素从未被切换过,就不可能将它切换到任何“更高/更高”的位置(因为没有更多的)。在您的第二个 for 循环的“最后一次”迭代中(所以i + 1 == n
在开始时保持)r
将始终评估为i
因此不会发生真正的切换。如果最后一个元素仍然存在,您将永远重复此操作。
推荐阅读
- postgresql - 如何将不在 Docker 上运行的 Odoo 连接到在 Docker 上运行的 Postgres 容器?
- mysql - 如何正确编写子查询以获取每个帖子的评论数?
- php - PHP 中的 XML 到 CSV
- python-3.x - 我的问题是关于 raise NotFittedError("在查询之前必须适合邻居。")
- python - Flask 中一个基本定义的含义
- javascript - 在 JS/CSS 中调整 SVG 的高度
- django - 当我在 ip:8000 运行服务器时,Linode/Django 看不到站点
- javascript - 解析一组 JSON 数组
- python - Flask-WTF 'FileField' 对象没有属性 'has_file'
- python-3.x - 为什么遇到的 RuntimeWarning 取决于变量的位置?