2009-12-04 67 views
0

警告新手/新手錯誤包含在閱讀中,風險自負!用def編寫自定義方法

好吧,試着把一些代碼放在一起來閱讀和打印一個基於文本的迷宮文件。這是我到目前爲止有:

def read_maze(filename) 
local_maze = [] 
mz_file = File.open(filename,"r") 

while ! mz_file.eof? do 
line = mz_file.gets.chomp 
local_maze = line.scan(/./) 
end 

mz_file.close 
return local_maze 
end 
puts "done" 

maze = read_maze("maze1.mz") 

def print_maze(maze) 
maze.each {|row| 
puts row.join("") 
} 
end 
puts "made it too next step" 
print_maze(maze) 

這裏的另一個文件叫我maze1.mz文件表示

######## 
    # F # 
    #### #       
    # S #       
    ########   

我得到我的自定義DEFS內部方法錯誤,這裏是NetBeans的吐回

做 快速注:我編輯C:\誤差爲不列出硬盤驅動器上我directoy結構

C:\ test.rb:21:在print_maze': undefined method加入爲 「#」:字符串(NoMethodError)

使它過於下一步

C:\ test.rb:20:在each' C:\test.rb:20:in print_maze」 C:\ test.rb:25

我一直在尋找這個約2小時,一直沒能解決的問題#IRB是沒有幫助或者

回答

1

改線

local_maze = line.scan(/./) 

local_maze << line.scan(/./) 

,您將得到迷宮打印出來。 <<將項目添加到數組。

0

加入陣列上的作品,而不是字符串

1

你想如何輸出read_maze()

如果你想包含每次你需要使用local_maze.concat(line.scan(/./))

如果你想一個數組的數組字符數組,每個都包含在一個給定行的每個字符,那麼你需要使用local_maze << line.scan(/./)

通過您的print_maze()我想你想的最後一個,在這種情況下嘗試一些簡單的像:

def read_maze(filename) 
    File.open(filename) do |f| 
    f.collect { |line| line.chomp.scan(/./) } 
    end 
end 

def print_maze(m) 
m.each { |row| puts row.join("") } 
end 

maze = read_maze("maze1.mz") 
print_maze(maze) 
+0

感謝您的幫助http://ruby-doc.org/core/classes/Array.html#M002167關於加入和<<問題 感謝您的更正。我非常感謝他們! – Matt 2009-12-04 01:52:46

0

你也可以用line.chomp.to_a替代line.chomp.scan(/./) - 其更清晰,更有效