2014-10-22 25 views
-2

我已經有了我所需要的程序框架,只要我被告知我需要的方法。但是,除此之外,我無法確定如何開始編寫此程序。詳情如下。 我並不是要求爲我完成我的程序,實際上我只是對如何開始感到困惑。我知道我需要閱讀用戶輸入來獲取文本文件,我們在我的大學使用掃描儀,但我不知道是否需要在構造函數中,主要方法或其他方法中。如何從這些細節開始

  1. 接受一個命令行參數 - 即一個包含行的文本文件分隔字符串對列表。這些String對將表示依賴圖中的邊。例如,一行代碼如下:A.java B.java表示從A.java到B.java的依賴邊。代表以上圖形的文件可能如下所示:Main.java A.java A.java B.java

  2. 將從文件中讀取的每個字符串映射到唯一的整數標識符。該映射將使文件名變爲數組索引變得容易。

  3. 將每個唯一整數標識符(從上方)映射回原始字符串。

  4. 計算表示字符串之間的依賴關係的鄰接矩陣。

  5. 對鄰接矩陣執行傳遞閉包操作以產生表示串之間的傳遞依賴關係的新閉包矩陣。執行此操作的簡單方法是Floyd-Warshall算法 - 您可能需要對此主題進行一些研究。

  6. 您的輸出必須遵循課程網站上示例輸出文件所示的格式。在課程網站上是一個示例輸入文件和相應的輸出文件。在這個例子中你的輸出必須具有相同的格式。目標是使輸出信息具有吸引力,可讀性強,清楚地表明下面列出的每種方法都能正常工作。

  7. 與私人領域的返回類型,如getNameIdMap,getIdNameMap,getRoots等方法,而 不是返回我們的那個地圖的類副本(克隆)的內部狀態的一個可變的部分,應當返還列表。這樣調用者獲得一個完全可用的對象(例如,列表或地圖),而不會影響類的內部狀態。

你的程序也應該提供以下方法:

  1. 公共地圖getNameIdMap() - 返回從字符串到唯一的整數 標識符的映射。整數標識符表示給定字符串的相鄰矩陣和閉包矩陣的索引。注意:在Python中,返回值必須是帶有對的字典,其中鍵是字符串,值是整數。

  2. public Map getIdNameMap() - 返回從唯一整數標識符返回 到原始字符串的映射。注意:在Python中,返回值必須是帶有鍵的字典,鍵是int,值是字符串。

  3. public int [] [] getDependenceGraph() - 返回表示文件之間相關性的鄰接矩陣。

  4. public int [] [] getTransitiveDependenceGraph() - 在傳遞閉包操作應用後返回依賴關係圖。

  5. public List getRoots() - 返回與其他文件不依賴的文件對應的字符串列表(例如,上面的示例中的Main)。注意:在Python中,返回值也是一個字符串列表。

  6. public List getLeaves() - 返回與不依賴於其他文件的文件相對應的字符串列表(例如,上例中的B)。注意:在Python中,返回值也是一個字符串列表。

  7. public void removeLeaf(String leaf) - 從鄰接矩陣和傳遞閉包矩陣中移除一個葉。這意味着如果X依賴於Y而Y是被去除的葉子,則X對Y的依賴也被消除。這可能會或可能不會使X成爲新的一頁。考慮在矩陣中使用一個特殊的數字(即0和1以外的數字)來表示該文件已被邏輯刪除。

  8. public List firewall(String node) - 計算指定文件的「類防火牆」。在軟件工程中,類防火牆概念指出,當在系統上執行維護時,只有被更改影響的更改類和類才需要重新測試。注意:在Python中,返回值也是一個字符串列表。對於這種方法,您應該重新測試間接受到影響的類以及直接受影響的類。例如,如果A類依賴於B類,而B類依賴於C類並且您更改了C類,那麼您應該重新測試類A和B.

  9. public void printParallelGroups() - 假設我們要並行化編譯這些文件時,我們需要識別不會觸發其他文件編譯的文件;這些是依賴圖中的葉子。此方法識別可以並行編譯的文件,打印該文件列表並將其從圖中刪除。該方法應該重複這個過程,直到所有文件被「編譯」。

+3

歡迎來到StackOverflow。我們很樂意爲您提供具體的問題,但我們不會從規範中做功課,我們也不是指導服務。請閱讀關於如何提出一個好問題的指導原則:http://stackoverflow.com/help,並在您有一個很好的問題時回來。如果你不知道如何開始編寫程序,你還沒有準備好在這裏提問。 – GreenAsJade 2014-10-22 05:19:54

回答

0

我開始寫一些代碼時遇到過很多次類似的情況。我想,你對你的問題有一個很好的想法。你可以用2-3個值創建一個示例文本文件(甚至在一張紙上),並試着更多地考慮你想要的東西。你知道需要一個主要的方法來獲取你的文件名。您可以在主要或構造函數或其他方法中使用掃描儀。這取決於你使用的設計。如果你想要一個非常基本的程序,你可以在主要方法中聲明它並繼續。但我建議你應該使用另一種方法從文件中獲取輸入,比如readInputFromText(),這裏聲明瞭一個本地掃描器對象。你當然也可以用其他方式做到這一點。 我遵循的一些基本規則是:

  1. 對每個任務都有單獨的方法。要打開一個文件,我有一個fileOpener,要關閉它,我有另一個方法等。每個方法只應該執行一個任務。所有與文件相關的功能都將放在一個類中,比如FileUtil。這是一個實用程序任務,而不是您的主要任務,因此您將所有這些util類保留在Util包中,例如FileUtilities,StringUtilities,DatabaseUtilites等。

    1. 良好的命名策略和以下約定。

    2. 使用像Maven或Ant這樣的構建工具。

    3. 做文檔和正確的測試。

我不知道它是否真的回答您的問題以某種方式。但請記住這些並從您的程序開始。在每個階段進行測試並製作一個主版本。保留後續版本的改進。

如果您有具體問題,一個大社區正等着你:)

最良好的祝願。

相關問題