【发布时间】:2014-09-04 22:36:14
【问题描述】:
我似乎无法弄清楚为什么我不断收到此错误!这是我第一次处理队列。我确信解决方案很简单,我可能缺少一些基本的东西。非常感谢任何指导/帮助:
import java.util.LinkedList;
import java.util.Queue;
public class Josephus{
public static void main(String[] args)
{
int n = Integer.parseInt(args[0]),
m = Integer.parseInt(args[1]);
Queue<Integer> q = new LinkedList<Integer>();
for (int i = 0; i < n; i++)
q.remove(new Integer(i));
int k = 0;
while (!q.isEmpty())
{
int x = q.remove();
if (++k % m == 0)
System.out.print(x + " ");
else
q.remove(x);
System.out.println(x + " ");
}
}
}
这段代码的原始提示如下: 约瑟夫问题。在古代约瑟夫斯问题中,N 人处于水深火热之中,同意以下策略来减少人口。他们把自己排成一个圆圈(从 0 到 N-1 的位置)并绕着圆圈前进,淘汰第 M 个人,直到只剩下一个人。传说约瑟夫斯为了避免被淘汰而想出了坐在哪里。编写一个队列客户端 Josephus,从命令行获取 N 和 M,并打印出人员被淘汰的顺序(从而显示 Josephus 在圆圈中的位置)。
【问题讨论】:
-
for (int i = 0; i < n; i++) q.remove(new Integer(i));...您从新队列中删除了某些内容?那应该如何工作?您应该改用q.add(...)。q.remove(x);行应该做什么?remove方法不接受任何参数。 -
调用时是否将参数传递给 main 方法?唯一能够抛出此异常的语句是使用 args 数组的 n 和 m 声明。
标签: java arrays queue bounds josephus