2013-04-04 326 views
0

我刚刚开始我的红宝石旅程,并且对于编程一般也很新。这是作业分配的代码。标题中描述了语法错误。我知道我在文件结尾预期时添加了一些额外的结尾?对? 但这个额外的“结束”在哪里。

的代码:

class WrongNumberOfPlayersError < StandardError ; end 
class NoSuchStrategyError < StandardError ; end 

def rps_result(move1,move2) 

    if (move1 == "r" && move2 == "s") || (move1 == "s" && move2 == p) || (move1 == "p" && move2 == "r") 
    return true 
    else 
    return false 
    end 

def rps_game_winner(player1, player2)  
    strategy = /[rps]/ 
    raise NoSuchStrategyError unless (move1 =~ strategy) & (move2 =~ strategy) 

    move1 = player1[1].downcase 
    move2 = player2[2].downcase 

    rps_result(move1, move2)? player1 : player2 
    end 
end 

def rps_tournament_winner(game) 
    round_winners = [] 

    if game.length < 2 
    raise WrongNumberOfPlayersError 
    else 
    game.each_slice(2) do 
     |l1 , l2| 
     round_winners << rps_game_winner(l1, l2) 
    end 

    rps_tournament_winner(round_winners) 
    end 
end 

rps_tournament_winner([[[["Richard", "S"], ["Dave", "S"]], [["Richard", "R"], ["Michael", "S"]]], [[["Allen", "S"], ["Omer", "P"]], [["David E.", "R"], ["Richard X.", "P"]]]]) 
+0

在未来,请格式化你的清晰度的问题(有编辑窗格显示了如何的问题将实际显示下方观察) – jwalk 2013-04-04 06:08:17

+0

有关 – neonate 2013-04-04 06:14:07

回答

0

rps_result方法不会被关闭。将rps_game_winner末尾的第二个end移至rps_result方法的最后一个预定行。

P.s.对不起,所有的end的:)

+0

我得到了同样的错误 – neonate 2013-04-04 06:32:43

+0

注意遗憾,你在'rps_game_winner'方法的末尾有两个'end'。尝试删除一个。 – jwalk 2013-04-04 06:34:17

0

我已经修改了第二个代码块。请检查它是否有效。

def rps_game_winner(player1, player2)  
    strategy = /[rps]/ 
    raise NoSuchStrategyError unless (move1 =~ strategy) && (move2 =~ strategy) 

    move1 = player1[1].downcase 
    move2 = player2[2].downcase 

    rps_result(move1, move2) ? player1 : player2 
end  

def rps_tournament_winner(game) 
    round_winners = [] 

    if game.length < 2 
    raise WrongNumberOfPlayersError 
    else 
    game.each_slice(2) do |l1 , l2| 
     round_winners << rps_game_winner(l1, l2) 
    end 

    rps_tournament_winner(round_winners) 
    end 
end 

rps_tournament_winner([[[["Richard", "S"], ["Dave", "S"]], [["Richard", "R"], ["Michael", "S"]]], [[["Allen", "S"], ["Omer", "P"]], [["David E.", "R"], ["Richard X.", "P"]]]]) 

难道4点的变化:

  1. 删除多余endrps_game_winner方法。

  2. rps_game_winner方法中增加了第三级操作员之间的空间。

  3. rps_game_winner方法,第二行,unless条件只有一个&

  4. rps_tournament_winner方法中,在do之后移动了参数|l1, l2|

+0

现在我得到这个错误:在'rps_game_winner':未定义的局部变量或方法'move1'为主:对象(NameError) \t from part2.rb:39:in'block in rps_tournament_winner' \t from part2.rb:37 :在'每个 ' \t从part2.rb:37:在'each_slice' 从part2.rb \t:37:在'rps_tournament_winner '从part2.rb \t:48:在'

' – neonate 2013-04-05 04:32:29

+0

是否有一个撇号( ')在方法名称“rps_game_winner”之后? – varunvlalan 2013-04-05 07:01:54

相关问题