2015-06-25 103 views
-1

請你幫忙寫一個java程序,它應該接受一個定義依賴關係的字符串數組。每個字符串都包含一個包的名稱,後跟一個冒號和空格,然後包含該包所需的任何依賴項。爲了簡單起見,我們假定一個包最多隻能有一個依賴。該程序應該按照安裝順序輸出一個以逗號分隔的軟件包名稱列表,以便軟件包的依賴性始終位於該軟件包之前。該程序應該拒絕包含循環的依賴規範作爲無效。有效輸入 KittenService的Java程序包安裝程序

實施例: Leetmeme:Cyber​​portal Cyber​​portal:冰 CamelCaser:KittenService Fraudstream:Leetmeme 冰:

爲一個有效的輸出以上將是:

KittenService,製冰,Cyber​​portal,Leetmeme,CamelCaser,Fraudstream

應該被拒絕的輸入示例(包含循環) KittenService: Leetmeme:Cyber​​portal Cyber​​portal:冰 CamelCaser:KittenService Fraudstream: 冰:Leetmeme

+2

你嘗試的東西嗎? – barunsthakur

+0

我打算在地圖上輸入內容。請你給我解釋一下我應該使用什麼邏輯。 – Sunshine

+1

Stackoverflow不是一個網站,您發佈問題並獲取代碼作爲回報。請向我們展示您的嘗試,我們可能會幫助您理解您不瞭解的概念。 – Turing85

回答

0

首先:SO不是一個編碼服務。告訴我們你有什麼,問題在哪裏,你會得到幫助。現在爲解決方案 - 我不會編碼任何東西,我希望沒有其他人。由於依賴關係不包含任何週期,因此該結構是一棵樹。只需遍歷樹形郵件順序並按此順序導入每個包。

+0

感謝您的迴應。我需要邏輯上的幫助: – Sunshine

+0

我有一個疑問,我不能製作一棵樹,因爲根據輸入,會有許多獨立的樹木1)kittenservice - > CamelCaser 2)ice-> Cyber​​portal - > leetmeme - > camelcaser - > fraudstream – Sunshine

+0

class解決方案 { Map input = new HashMap (); 列表 output = new LinkedList (); public void getInput()throws IOException BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String s; (s。in.readLine())!= null && s.length()!= 0) if(s.split(「:」)。length> 1) input.put(s。分裂( 「:」)[0] .trim(),s.split(( 「:」))[1] .trim());其他 input.put(s.split(「:」)[0]。修剪(),NULL); } } } – Sunshine

0

從輸入字符串數組獲取軟件包列表:

public static List<String> getPackages(String[] intputStrings, 
     String inputDelimiter, char wordEndChar, String rejectWord, 
     String outputDelimiter) { 

    List<String> al = new ArrayList<String>(); 

    for (String inputString : intputStrings) { 

     if (!(inputString.indexOf(rejectWord) > 0)) { 

      for (String string : inputString.split(inputDelimiter)) { 
       int idx = string.indexOf(wordEndChar); 
       if (idx > 1) 
        al.add(string.substring(0, idx)); 
      } 
     } 
    } 

    return al; 
} 

調用部分(輸入輸出):

public static void main(String[] args) { 

String intputString[] = { 
     "KittenService: Leetmeme: Cyberportal Cyberportal: Ice CamelCaser: KittenService Fraudstream: Ice: Leetmeme", 
     "(contains cycles) KittenService: Leetmeme: Cyberportal Cyberportal: Ice CamelCaser: KittenService Fraudstream: Ice: Leetmeme", 
     "One: Two: x Three: Ice CamelCaser: KittenService Fraudstream: Five: Leetmeme" }; 

List<String> s = getPackages(intputString, " ", ':', " cycles", ", "); 

for (String string : s) 
    System.out.print(string + " ,");   
} 
+0

嗨Rajesh,感謝上述解決方案。不幸的是,它沒有按預期提供解決方案。如果有人能夠解釋我的邏輯,我可以編碼我的自我。 – Sunshine

+0

我已更新code..go並通過它運行它。如果我錯過了某些東西從您的輸入中捕獲,請告訴我。 – Rajesh