2014-09-04 85 views
0

我正在爲作業進行作業:進口/庫問題?

Josephus問題。在來自古代的約瑟夫斯問題中,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下的「創造性問題部分」,最後是

+1

您是否熟悉抽象類? – 2014-09-04 21:19:41

+0

可能重複[如何在Java中實例化隊列對象?](http://stackoverflow.com/questions/4626812/how-do-i-instantiate-a-queue-object-in-java) – DavidPostill 2014-09-04 21:22:09

+0

隊列 q =新LinkedList ();你的代碼的問題是你試圖實例化一個接口。 – coffeeaddict 2014-09-04 21:23:00

回答

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 + " "); 
+0

謝謝@rgettman。我嘗試了你的建議,結果出來了! – Christophorus 2014-09-14 09:22:53