2012-11-23 4 views
1

Je suis en train de faire un simple top quinze avec ce code:Copiez quinze premiers éléments d'un tableau à un autre

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) 
      } 
     } 
    } 

La fonction doit copier les quinze premiers éléments qui se trouvent dans le tableau numbers à tableau top, mais actuellement je ne reçois que:

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

Qu'est-ce que je fais mal?

+0

pourquoi n » t vous écrivez juste 'val top = numbers.sorted.take (15)'? –

+0

@ om-nom-nom: en fait 'numbers.sorted.reverse.take (15)', mais sinon vous avez raison. –

+0

Je voulais éviter d'utiliser au maximum les fonctions de la bibliothèque pour comprendre l'utilisation des fonctions et des cycles récursifs. –

Répondre

2

Votre code ne fonctionne pas parce que vous remplaçant les numéros précédemment définis:

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) 
.... 

Vous pouvez le fixer avec le numéro de placement adjacent vous remplacez au bon endroit:

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) 
     } 
    } 
} 
+0

Je comprends où j'ai échoué, merci! –

Questions connexes