2015-12-07 45 views
-2

下面的代码给了我一个ArgumentError,我不知道这个问题。如何修复错误数量的参数错误(0代表1)

的挑战来自代码的出现,第3天

require 'set' 

x, y = 0 
visited = Set.new 

def move(dir) 
    case move 
    when ">" 
    x += 1 
    when "<" 
    x -= 1 
    when "^" 
    y += 1 
    when "v" 
    y -= 1 
    end 
end 

def visit(x,y) 
    unless visited.include?([x,y]) 
    visited << [x,y] 
    end 
end 

a_file = File.open("day3a_directions.txt", "r") 
a_file.each_line("\n") do |line| 
    line.each_char do |dir| 
    move(dir) 
    visit(x,y) 
    end 
end 

puts visited.length 

这是我得到的错误:

day3a.rb:6:in `move': wrong number of arguments (0 for 1) (ArgumentError) 
    from tmp.rb:7:in `move' 
    from tmp.rb:28:in `block (2 levels) in <main>' 
    from tmp.rb:27:in `each_char' 
    from tmp.rb:27:in `block in <main>' 
    from tmp.rb:26:in `each_line' 
    from tmp.rb:26:in `<main>' 
+0

您可以添加堆栈跟踪吗? – yez

+0

Ruby没有“错误的参数错误”。请修改您的帖子以包含确切的错误消息,包括行号和堆栈跟踪。 –

+0

P.S.我可以看到你的代码有一个问题:在'visit'中你调用'visited.include?',但是'visited'在那个范围内不存在。 –

回答

4

你在定义在代码中一个错字move,在这里:

def move(dir) 
    case move 
    when ">" 
    ... 

应该是:

def move(dir) 
    case dir 
    when ">" 
    ... 

此外,我可能会补充说,您在添加元素之前检查元素是否存在,从而规避了Set的整个点。这已经建成了课堂。

+0

谢谢你们。我修正了这个错误,并且我把这些变量全局化了,以便修复错误。现在我只是得到了错误的答案,所以我的逻辑必然存在问题。我会为此努力。 – thermobeelearns

相关问题