1

私はこのコードで単純な 1 つのトップ 15 を作ろうとしています:

    var top = Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
    val numbers = Array(4,5,8,1,33,23,45,6,11,10,87,46,43,66,55,98,78,71,19,20)


    def getTop() : Unit = {
        for ( i <- 0 to (numbers.length - 1)) {
            set(0, numbers(i), top)
        }

        top.map(x => println(x))
    }

    def set(index: Int, number: Int, top: Array[Int]) : Unit = {
        if (index <= top.length-1) {
            if(top(index) < number) {
                top(index) = number
            }
            else {
                set(index+1, number, top)
            }
        }
    }

この関数は、配列内の上位 15 要素を array にコピーする必要がありますnumberstop、現在は次のものしか取得できません。

98,78,71,20,0,0,0,0,0,0,0,0,0,0,0

私は何を間違っていますか?

4

1 に答える 1

2

以前に設定した数値をオーバーライドしているため、コードは機能しません。

top = Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)  //initially  
top = Array(4,0,0,0,0,0,0,0,0,0,0,0,0,0,0)  // let's call set for '4'  
top = Array(5,0,0,0,0,0,0,0,0,0,0,0,0,0,0)  // now for 5 ...   
top = Array(8,0,0,0,0,0,0,0,0,0,0,0,0,0,0)  
top = Array(8,1,0,0,0,0,0,0,0,0,0,0,0,0,0)  
....

正しい場所に置き換えている隣接する配置番号で修正できます。

val top = Array.fill(15)(0)
val numbers = Array(4,5,8,1,33,23,45,6,11,10,87,46,43,66,55,98,78,71,19,20)


def printTop() : Unit = {
    for (n <- numbers) {
        set(0, n, top)
    }

    top.foreach(x => println(x))
}

def set(index: Int, number: Int, top: Array[Int]) : Unit = {
    if (index < top.length) {
        val current = top(index)
        if(current < number) {
            top(index) = number
            set(index+1, current, top) // send replaced number down the street
        }
        else {
            set(index+1, number, top)
        }
    }
}
于 2012-11-23T20:44:52.940 に答える