kotlin n个数字的输出GCD

jaql4c8m  于 2022-12-04  发布在  Kotlin
关注(0)|答案(1)|浏览(142)

用欧氏算法求N个数的GCD

fun main(){
    var n = 3
    var m = IntArray(n)
    m.set(0, 24)
    m.set(1, 18)
    m.set(2, 30)
    var ex29 = Ex29()
    ex29.GCD(m)
}
class Ex29 {
    fun GCD(array: IntArray){
        if (array.toSet().size==1){
            println(array[0])
        }
        var array2 = array
        while (array2.toSet().size!=1){
            array2.sort()
            var new_array=IntArray(50)
             new_array[0]=array[0]
            var dif:Int
            for(i in 0 until array2.size-1){
                dif = array2[i+1]-array2[i]
                if(dif>0){
                    new_array.set(i+1, dif)
                }
            }
            array2=new_array
        }
        println(array2[0])
    }
}

没有错误,但希望我在控制台中输入一些东西。即使我无限地输入,它也从不停止。

cmssoen2

cmssoen21#

你已经陷入了一个无限循环,你需要尝试和调试正在发生的事情。
我建议在代码中的有用位置添加一些语句来记录变量,并限制while循环的迭代次数,以便程序可以终止并显示日志输出。
按照这种方法,我对代码进行了如下调整(playground):

fun main(){
    var n = 3
    var m = IntArray(n)
    m.set(0, 24)
    m.set(1, 18)
    m.set(2, 30)
    var ex29 = Ex29()
    ex29.GCD(m)
}
class Ex29 {
    fun GCD(array: IntArray){
        if (array.toSet().size==1){
            println(array[0])
        }
        var array2 = array
        // removing while loop for now...
        // while (array2.toSet().size!=1){
        for (j in 1..20) { // Adding a finite loop...
            println("At loop number $j") // ... logging the loop number...
            array2.log() // ... and the array at that point.
            array2.sort()
            var new_array=IntArray(50)
             new_array[0]=array[0]
            var dif:Int
            for(i in 0 until array2.size-1){
                dif = array2[i+1]-array2[i]
                if(dif>0){
                    new_array.set(i+1, dif)
                }
            }
            array2=new_array
        }
        println(array2[0])
    }
}

// A new convenience function for logging an array
fun IntArray.log() {
    val arrayString = this.joinToString(", ")
    println("Array of length ${this.size} logged: $arrayString")
}

现在你可以试着运行它,找出程序哪里出错了。

相关问题