0

我正在做一个班级作业:

约瑟夫问题。在古代约瑟夫斯问题中,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 下的“创意问题部分”接近尾声。

4

1 回答 1

0

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

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

队列方法enqueuedequeue分别以不同的方式命名——offerpoll。例如:

q.offer(i);

int x = q.poll();

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

System.out.print(x + " ");
于 2014-09-04T21:24:24.407 回答