2017-04-06 3 views
1
array = [[]] 
    for level in 0..counter-1 
    for line in 0..counter-1 
     array[level].push(rectangle[x+level][y+line]) 
    end 
    end 

Ich erhalte diese Fehler NoMethodError: nicht definierte Methode `Push‘ für null: NilClassRubin, mehrdimensionales Array Push Fehler

Ich möchte alle Plätze innerhalb eines Rechtecks ​​zu finden, aber wenn ich versuche zu retten, Platz in benutzerdefinierten Array bekomme ich einen Fehler.

array[level].push(rectangle[x+level][y+line]) 

alles, was ich hier tun möchte, zum Beispiel Array ein Quadrat wie zu erzeugen [[3, 4], [5, 2]], die

3 4 5 2 wäre. das Problem ist, dass array[0].push(rectangle[x+level][y+line]) mit Nummer anstelle von Variable funktioniert, aber mit variabler 'Ebene' gibt es mir Fehler, aber wenn ich konstante Nummer verwenden kann ich nicht Multi-Level-Array generieren.

Hilfe?

+1

Bitte zeigen Sie, woher 'counter' und' rectangle' stammen. –

+0

'Rechteck' ist Funktionsparameter (2d Array) – Aldon

Antwort

3

Das Problem ist, dass array nur ein Element hat, deshalb ist es für die Ebene arbeitet = 0. Sie können es leicht wie dieses Problem zu beheben:

array = [] 
for level in 0..counter-1 
    array.push [] 
    for line in 0..counter-1 
    array[level].push(rectangle[x+level][y+line]) 
    end 
end 
1

eine Lösung gefunden

2darray = [[]] 
    i=0 
    for level in 0..counter-1 
    array = [] 
    for line in 0..counter-1 
     array.push(rectangle[x+level][y+line]) 
    end 
    2darray.push(array) 

erzeugen 1d Array und an 2d Array anhängen

+2

ein paar Probleme damit. Die erste for-Schleife wird niemals geschlossen, das letzte 2d-Array würde als erstes Element ein leeres Array haben – user81269