2015-06-25 98 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