进口/图书馆的问题?

时间:2014-09-04 21:18:12

标签: java jar queue stdout josephus

我正在为班级做作业:

约瑟夫斯问题。在来自古代的约瑟夫斯问题中,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;到最后。

1 个答案:

答案 0 :(得分:0)

Queue是一个接口,无法在Java中直接实例化。您必须提供具体的实现类,例如ArrayDeque

Queue<Integer> q = new ArrayDeque<Integer>();

队列方法enqueuedequeue的命名方式不同 - offerpoll。 E.g:

q.offer(i);

int x = q.poll();

StdOut不是Java中的类;使用System.out,例如:

System.out.print(x + " ");