我正在为班级做作业:
约瑟夫斯问题。在来自古代的约瑟夫斯问题中,N人陷入了困境,并同意采取以下减少人口的策略。他们将自己安排在一个圆圈中(编号从0到N ??? 1的位置)并围绕圆圈行进,消除每个第M个人,直到只留下一个人。传说约瑟夫斯已经找到了避免被淘汰的地方。编写一个Queue客户端Josephus.java,它从命令行中获取M和N,并打印出人们被淘汰的顺序(因此会显示约瑟夫斯在圆圈中的位置)。
我的代码如下:
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会使Queue工作,而对于StdOut,我确实下载了一个stdlib.jar来添加到项目库中,其中包含了StdOut,我认为这样可行。
如果我的代码或其他任何我需要做的问题,我真的很感激帮助。此外,为了参考和看到我在哪里得到stdlib.jar,这里是教科书网站的链接,问题来自:http://algs4.cs.princeton.edu/13stacks/(约瑟夫斯问题是&#34下的#37;创意问题部分&#34;到最后。
答案 0 :(得分:0)
Queue
是一个接口,无法在Java中直接实例化。您必须提供具体的实现类,例如ArrayDeque
。
Queue<Integer> q = new ArrayDeque<Integer>();
队列方法enqueue
和dequeue
的命名方式不同 - offer
和poll
。 E.g:
q.offer(i);
和
int x = q.poll();
StdOut
不是Java中的类;使用System.out
,例如:
System.out.print(x + " ");