2011-04-13 4 views
0

J'ai un tableau comme celui-cideux tableau multidimensionnel de manutention en rubis

[["1"], ["2","3"]] 

Au début, j'avais cet algorithme

maxarray = [] 
i = 0 
m = array.count 
while i < m do 
    x = 0 
    s = array[i].count 
    while x < s do 
    maxarray[i][x] = (Integer(array[i][x]) + [Integer(maxarray[i-1][x-1]), Integer(maxarray[i-1][x])].max) 
    x+=1 
    end 
    i+=1 
end 

l'erreur était la suivante:

`<main>': undefined method `[]' for nil:NilClass (NoMethodError) 

donc je pensais que peut-être les index de tableau se trompe donc j'ai étendu mon algorithme

maxarray = [] 
i = 0 
m = array.count 
while i < m do 
    x = 0 
    s = array[i].count 
    while x < s do 
    if i-1 < 0 
     item2 = 0 
    elsif i-1 < 0 && x-1 < 0 
     item1 = 0 
    else item1 = maxarray[i-1][x-1] 
     item2 = maxarray[i-1][x] 
    end 
    maxarray[i][x] = (Integer(array[i][x]) + [Integer(item1), Integer(item2)].max) 
    x+=1 
    end 
    i+=1 
end 

mais maintenant j'ai une autre erreur:

`Integer': can't convert nil into Integer (TypeError) 

comment peut éviter cette erreur et exécutez le script?

+0

| (do_something) end' Vous n'utilisez pas les pouvoirs de Ruby ici :) – SirLenz0rlot

+2

Peut-être que vous pourriez expliquer ce que vous essayez de faire plutôt que de donner votre solution actuelle ... –

+1

@Chris McCauley c'est juste au milieu 'maxarray = (Integer (tableau [i] [x]) + [Entier (item1), Entier (item2)]. max) ':) – Mikee

Répondre

0

Pourquoi n'avez-vous pas flatten la matrice et faites votre calcul? Certainement, cela rendra votre fonction plus simple. Pourquoi ne pas utiliser: `maxarray.each do | cur_x |

+0

Cela ressemble à une tâche impliquant une programmation dynamique, elle repose sur plusieurs dimensions de l'ensemble de données pour simplifier le code. C'est de la conjecture, puisque même l'auteur ne parvient pas à expliquer son intention. –

Questions connexes