2016-12-13 4 views
0

私はflood-fillを作成しようとしています。ユーザ入力は、無作為に生成された配列のうち、 'colors'で表される1から6までの数字の入った配列の右上隅から始まります。今はoldColor/newColor機能を追加しましたが、エラーメッセージが表示されてしまいました。そうでなければ、アルゴリズムは各ステップで新しいflood-fillがどのように見えるかを印刷せずに入力を求め続けます。Ruby Recursive flood-it

if array_1[row][column] != oldColor 
    return 

それ一度:

def floodfill(array_1, row, column, colours, oldColor, newColor) 
      #colours is an array of the 6 colours i'm going to be using 
      boxHeight = array_1.length 
      boxWeight = array_1[0].length 
      oldColor = array_1 
      #puts oldColor 
      print "> " 
      newColor = gets.chomp.downcase 

      if array_1[row][column] != oldColor 
      return 
      if newColor == "r" 
       newColor = colours[:red] 
       array_1[row][column] = newColor 
       floodfill(array_1, row + 1, column, colours, newColor) # right 
       floodfill(array_1, row - 1, column, colours, newColor) # left 
       floodfill(array_1, row, column + 1, colours, newColor) # down 
       floodfill(array_1, row, column - 1, colours, newColor)# up 
       print_it 
      else 
       puts "didnt get that" 
       array_1.each do |row| 
       row.each do |c| 
        print c 
       end 
       puts 
      end 
      end 
     end 
     end 
floodfill(array_1,14,9,colours,0,0) 

私はここで直接画像を投稿したが、カントは、私の出力は、現在のように見え、その後、障害メッセージ http://imgur.com/a/88UrK

+0

"[mcve]"をお読みください。予想される出力とともに、問題を示す最小限のコードと入力データが必要です。どのようなエラーコードがありますか?また、Rubyでは変数名にsnake_caseを使用しています。 camelCaseIsTooHardToRead。 –

+0

この 'oldColor = array_1'は意味をなさない。なぜあなたは引数を破棄し、それをイメージのコピーで置き換えていますか? – Max

+0

私は、newColorsに塗りつぶしの責任を持たせるためにoldColorsにもともとあったものがoldColorsに含まれるようにすることを考えました。これはうまくいかないでしょうか?私はかなり新しくルビーになっており、この作業をするための正しい方向を指し示したいと思っています – LeeKay220

答えて

1

この短絡あなたのコードを実行するものですヒットしたreturnはメソッドからnilを返し、それ以外は評価されません。

boxHeightboxWeightは決して初期化されず、newColorはおそらく発生しないはずのgetsによって上書きされます。

最後に、コードには末尾にendがありません。私は、コードを自動的に再フォーマットするツールを使用することをお勧めします。これは本当にそのような問題を避けるのに役立ちます。

+0

さらに説明できますか?どのように私はそれを修正について行くだろうか?私は最初に再帰的塗りつぶし関数が色の少なくとも1つのために働くことを確かめたいので、boxHeightとboxWeightを実装することに慣れていませんでした – LeeKay220

0

Rubyの文はCやJavaのように動作しない場合は、

if array_1[row][column] != oldColor 
    return 

ような何かを書くことができますいずれかをendか、復帰後場合を配置する必要があります必要があります。

if array_1[row][column] != oldColor 
    return 
end 
# or 
return if array_1[row][column] != oldColor 
+0

その2つのうちの1つを実行すると、 – LeeKay220

関連する問題