【发布时间】:2016-03-02 01:05:52
【问题描述】:
我是一个相对较新的 Ruby 学生,虽然我可以说它永远不会成为我更喜欢的语言,但我至少想了解它,因为它是一种网关语言。对于我的项目,我们被指示解决传递到多维数组中的迷宫。我们还没有学习递归或任何高级技术。这是一个概述。 我的代码中的具体问题是,在我的 while 循环中,我收到了我要传递到数组中的值的错误消息。
rb:60 in `: nil:NilClass 的未定义方法 `[]' (NoMethodError) 来自 -e:1:in `load'
我做了一个小时左右的研究,这意味着我传递给我的数组的值是 nil,但我已经为它分配了一个值。
我的代码如下。我已经将它隔离到导致它抛出错误的row 变量,但我已经为row 分配了一个值,并且可以通过。当我使用row+=1 时,它会抛出我认为的错误。 (虽然我可能是不正确的。)我也在向我的老师询问这个问题,但他没有回复,所以我想我也会在这里发布它,希望能找到错误的解决方案。
maze=[]
def main_menu (options)
options.each_with_index do |option, index|
printf("%-s. %-s\n", "#{index+1}", "#{option}")
end
print "Please make a selection:"
main_selection=gets.to_i
return main_selection
end
menu_selection=["Maze 1", "Maze 2", "Maze 3", "Maze 4", "Maze 5", "Maze 6", "Maze 7", "Maze 8", "Maze 9", "Maze 10", "Quit"]
user_selection=0
path=1
row=0
column=0
while user_selection != menu_selection.length
user_selection=main_menu(menu_selection)
puts user_selection
case user_selection
when 1
maze.clear
mz_file=File.open("maze1.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
mz_file.close
maze.each do |row|
puts row.join
end
maze.each_index do |row|
column = maze[row].index "F"
if column
maze[row+1][column]=0
maze[row-1][column]=0
maze[row][column+1]=0
maze[row][column-1]=0
end
end
maze.each do |row|
puts row.join
end
#WHILE LOOP FOR MAZE
while row <=maze[0].length
column=0
while column <= maze.length
if maze[row][column]== 0
maze[row+1][column]==path
maze[row-1][column]==path
maze[row][column+1]==path
maze[row][column-1]==path
end
column=column+1
end
row=row+1
end
maze.each do |row|
puts row.join
end
when 2
maze.clear
mz_file=File.open("maze2.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
when 3
maze.clear
mz_file=File.open("maze3.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
when 4
maze.clear
mz_file=File.open("maze4.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
when 5
maze.clear
mz_file=File.open("maze5.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
when 6
maze.clear
mz_file=File.open("maze6.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
when 7
maze.clear
mz_file=File.open("maze7.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
when 8
maze.clear
mz_file=File.open("maze8.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
when 9
maze.clear
mz_file=File.open("maze9.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
when 10
maze.clear
mz_file=File.open("maze10.mz")
while !mz_file.eof?
line=mz_file.gets.chomp.split("")
maze.push line
end
maze.each do |row|
puts row.join
end
mz_file.close
end
end
【问题讨论】:
标签: arrays ruby while-loop nomethoderror