我正在为一个学校项目制作一个合并排序算法,我必须用两种不同的方式来做。在其中一个中,我唯一可以使用的数据结构是数组,而在另一个中,我不能使用数组。我已经成功地做到了这两种方式,只有 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++
}
}
}
创建了一个缓冲阅读器,但不确定如何在不使用数组的情况下获取文件名。