用于软件包安装程序的Java程序



请您帮助编写一个java程序,该程序应该接受定义依赖项的字符串数组。每个字符串都包含一个包的名称,后面跟着冒号和空格,然后是该包所需的任何依赖项。为了简单起见,我们假设一个包最多可以有一个依赖项。程序应该按照安装顺序输出一个以逗号分隔的包名称列表,这样包的依赖项将始终位于该包之前。程序应拒绝包含循环的依赖项规范,认为其无效。

有效输入示例小猫服务:Leetme:网络门户网络门户网站:IceCamelCaser:小猫服务欺诈流:Leetme冰:

上述内容的有效输出为:

KittenService,Ice,Cyberportal,Leetme,CamelCaser,Fraudstream

应拒绝的输入示例(包含循环)小猫服务:Leetme:网络门户网络门户网站:IceCamelCaser:小猫服务欺诈流:冰:Leetme

首先:SO不是一个编码服务。告诉我们你有什么,问题在哪里,你会得到帮助。现在是解决方案-我不会编写任何代码,我希望其他人也不会。由于依赖关系不包含任何循环,因此结构是一个树。只需遍历树后序,然后按此顺序导入每个包。

从输入字符串数组中获取包列表:

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

最新更新