无需字符串数组即可获取程序启动控制台参数

问题描述 投票:0回答:0

我正在为一个学校项目制作一个合并排序算法,我必须用两种不同的方式来做。在其中一个中,我唯一可以使用的数据结构是数组,而在另一个中,我不能使用数组。我已经成功地做到了这两种方式,只有 1 个部分我不知道该怎么做,程序必须使用控制台参数启动,即

kotlin JoinFiles1.kt Output.txt Input_1.txt ... Input_n.txt
,JoinFiles 是我的程序,并且在我必须的方法中使用数组 我只是将普通字符串数组传递给主函数,
fun main(args: Array<String>)
然后使用 args 来访问文件,但是由于我不能在第二种方法中使用数组,所以我不确定如何通过控制台读取文件。感谢帮助!

到目前为止的代码

    fun main(args: Array<String>) {
        // ler as palavras de todos os arquivos de entrada e juntá-las em um array
        var palavras = arrayOf<String?>()
        for (nficheiro in args) {
            val file = File(nficheiro)
            file.forEachLine { line ->
                palavras.add(line)
            }
        }
    
        mergeSort(palavras)

    // remover palavras duplicadas mantendo apenas uma ocorrência de cada palavra
    var unicas = mutableListOf<String>()
    for (palavra in palavras) {
        if (!unicas.contains(palavra)) {
            unicas.add(palavra)
        }
    }

    // escrever as palavras no arquivo de saída
    val pw = createWriter(args[0])
    unicas.forEach { palavra ->
        pw.println(palavra)
    }
}

// algoritmo de merge sort para ordenar a mutableList de palavras
fun mergeSort(mList: MutableList<String>) {
    if (mList.size > 1) {
        val meio = mList.size / 2
        val esq = mList.subList(0, meio)
        val dir = mList.subList(meio, mList.size)
        mergeSort(esq)
        mergeSort(dir)
        var i = 0
        var j = 0
        var k = 0
        while (i < esq.size && j < dir.size) {
            if (esq[i] <= dir[j]) {
                mList[k] = esq[i]
                i++
            } else {
                mList[k] = dir[j]
                j++
            }
            k++
        }
        while (i < esq.size) {
            mList[k] = esq[i]
            i++
            k++
        }
        while (j < dir.size) {
            mList[k] = dir[j]
            j++
            k++
        }
    }
}

创建了一个缓冲阅读器,但不确定如何在不使用数组的情况下获取文件名。

algorithm kotlin console command-prompt mergesort
© www.soinside.com 2019 - 2024. All rights reserved.