2014-07-24 22 views
6

Sto cercando di compilare una matrice di quattro elementi con numeri interi positivi che sono meno di 9.Come si popola una matrice con numeri casuali?

Ecco il mio codice:

generated_number=Array.new(4)#create empty array of size 4 
generated_number.each do |random| #for each position in the array create a random number 
    random=rand(10) 
end 
puts generated_number 

Non capisco che cosa mi manca.

+1

Che cos'è sei un chiedendo? –

+0

Non capisco perché quando sto usando ciascun metodo, non associa il rand (10) a ciascun elemento nell'array –

+0

Il problema è che 'random = rand (10)' non aggiorna in realtà l'array valori. – infused

risposta

21

È possibile passare un intervallo di rand()

Array.new(4) { rand(1...9) } 
+0

e come dovrei riscrivere il mio codice in modo che funzioni? e anche grazie e userò la tua soluzione –

+0

Ho appena eseguito questo su Ruby Fiddle e hai bisogno che sia messo 'Array.new (4) {Random .rand (1 ... 9)} ' –

+0

@ J-Dizzle No, quando il blocco verrà eseguito separatamente per ciascun elemento. – fbonetti

3

Penso che tu sia troppo complicato.

generated_numbers = 4.times.map{Random.rand(8) } #=> [4, 2, 6, 8] 

edit: Per giggles ho messo insieme questa funzione:

def rand_array(x, max) 
    x.times.map{ Random.rand(max) } 
end 

puts rand_array(5, 20) #=> [4, 13, 9, 19, 13] 
+0

Grazie per il suggerimento :) E il mio codice, cosa c'era che non andava? Intendo cosa dovrebbe essere corretto per funzionare? –

+0

questo codice sostituisce tutto il codice :) –

+0

Generalmente, in Ruby, se puoi fare tutto in una riga, dovresti. C'è un libro intitolato "Eloquent Ruby" che ti insegna come creare il codice rubino che * sembra * come il codice rubino .. altrimenti il ​​tuo codice rubino assomiglierà molto al codice java o php, e questo ci farà prendere un po 'di freddezza. –

0

Così ho risolto per un array con 10 elementi :

n=10 
my_array = Array.new(n) 
i = 0 
loop do 
random_number = rand(n+1) 
my_array.push(random_number) 

i += 1 
break if i >= n 
end 

for number in my_array 
    puts number