我正在做一个班级作业:
约瑟夫问题。在古代约瑟夫斯问题中,N 人处于水深火热之中,同意以下策略来减少人口。他们将自己排成一个圆圈(从 0 到 N???1 的位置)并绕着圆圈前进,消除第 M 个人,直到只剩下一个人。传说约瑟夫斯为了避免被淘汰而想出了坐在哪里。编写一个队列客户端 Josephus.java,它从命令行获取 M 和 N,并打印出人员被淘汰的顺序(从而显示 Josephus 在圆圈中的位置)。
我的代码如下:
package josephus;
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 Queue<Integer>();
for (int i = 0; i < n; i++)
q.enqueue(new Integer(i));
int k = 0;
while (!q.isEmpty())
{
int x = q.dequeue();
if (++k % m == 0)
StdOut.print(x + " ");
else
q.enqueue(x);
}
StdOut.println();
} }
当我在 NetBeans 中运行它时,它给我的错误是:
队列是抽象的;无法实例化
入队:找不到符号
出队:找不到符号
StdOut:找不到符号
我认为通过导入 java.util.Queue 将使队列工作,对于 StdOut,我确实下载了一个 stdlib.jar 以添加到包含 StdOut 的项目库中,我认为这会起作用。
如果我的代码有问题或我需要做的任何其他事情,我将非常感谢您的帮助。此外,作为参考并查看我从哪里获得 stdlib.jar,这里是教科书网站的链接,该链接来自该问题的来源:http ://algs4.cs.princeton.edu/13stacks/ (约瑟夫斯问题是# 37 下的“创意问题部分”接近尾声。