2009-12-04 54 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(/./) - 其更清晰,更有效