前提・実現したいこと
エラーが出る原因が分かりません。
コードが正常に動く(最終的に 1 1 が検出される)ようにしたいです。
知りたいこと
Errorの解決方法または、参考となるようなものがないか
発生している問題・エラーメッセージ
test.rb:18:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)
該当のソースコード
board = [[".", ".", "."], [".", ".", "."], [".", ".", "."]] a = 0 b = 0 while board[a][b+1] == "." || board[a+1][b] == "." || board[a-1][b] == "." || board[a][b-1] == "." do if board[a][b+1] == "." while board[a][b+1] == "." do board[a][b] = "#" b += 1 end elsif board[a+1][b] == "." while board[a+1][b] == "." do board[a][b] = "#" a += 1 end elsif board[a][b-1] == "." while board[a][b-1] == "." do board[a][b] = "#" b -= 1 end elsif board[a-1][b] == "." while board[a-1][b] == "." do board[a][b] = "#" a -= 1 end end end puts "#{b} #{a}"
試したこと
- エラー内容確認
Rubyのプログラムを実行するとundefined method '>' for nil:NilClass (NoMethodError)と出ます
undefined method '[]=' for nil:NilClass (NoMethodError) について
- エラー文の前後を
p board
で確認
エラー内容からおそらくboardがnilになっていると考え、p boardで異常がないか確認しましたが
特に問題ありませんでした。
また、a,bの変数も値が入力されていました。
while手前に p board 追加
elsif board[a+1][b] == "." p board while board[a+1][b] == "." do board[a][b] = "#" a += 1 end 出力結果 ["#", "#", "."], [".", ".", "."], [".", ".", "."]]
while後方に p board 追加
elsif board[a+1][b] == "." while board[a+1][b] == "." do board[a][b] = "#" a += 1 end p board 出力結果 なし
whileに p board 追加
elsif board[a+1][b] == "." while board[a+1][b] == "." do board[a][b] = "#" a += 1 p board end 出力結果 [["#", "#", "#"], [".", ".", "."], [".", ".", "."]] [["#", "#", "#"], [".", ".", "#"], [".", ".", "."]]
補足情報(FW/ツールのバージョンなど)
Ruby 2.5.8
回答1件
あなたの回答
tips
プレビュー