这是我的代码:
class RockPaperScissors
# Exceptions this class can raise:
class NoSuchStrategyError < StandardError
end
def self.winner(player1, player2)
if ((player1[1] == 'R') && (player2[1] == 'S') ||
(player1[1] == 'S') && (player2[1] == 'P') ||
(player1[1] == 'P') && (player2[1] == 'R'))
return player1
elsif ((player1[1] == 'R') && (player2[1] == 'P') ||
(player1[1] == 'S') && (player2[1] == 'R') ||
(player1[1] == 'P') && (player2[1] == 'S'))
return player2
elsif ((player1[1] == 'R') && (player2[1] == 'R') ||
(player1[1] == 'S') && (player2[1] == 'S') ||
(player1[1] == 'P') && (player2[1] == 'P'))
return player1
end
end
def self.tournament_winner(tournament)
player1 = Array.new
player2 = Array.new
nextround = Array.new
while tournament.length != 1 do
tournament.each_with_index {|item, index|
if (index%2!=0)
player2[0] = item[0]
player2[1] = item[1]
elsif (index%2 ==0)
player1[0] = item[0]
player1[1] = item[1]
else
puts 'bananas'
end
if (index%2!=0)
nextround[(index-1)/2] = winner(player1, player2)
end
}
tournament=nextround
end
return tournament
end
end
RockPaperScissors.tournament_winner([["num1", "R"], ["num2", "P"], ["num3", "P"], ["num4", "R"]])
好吧,最后一行是执行启动。这段代码进行了一场石头剪刀布比赛。它将包含每个角色及其攻击的数组作为输入,并且它必须返回包含冠军及其攻击的数组。
比赛是 num1 vs num2(num2 胜),num3 vs num4(num3 胜)。然后决赛是Num2 vs Num3,在这个稳定的人中赢得了阵列中的第一个人(Num2)。
这似乎过于复杂,因为代码必须处理任意数量的字符,只要它们的数量是 base2(2、4、8、16 个字符......等)。
我的问题是下一个(调试代码,你会看到)。当它改变数组'Player1'或'Player2'的值时,它也会改变数组'nextround'中的值,即使它不在那一行!
这不应该发生!
顺便说一句,我正在学习 Ruby,所以这可能是一个非常愚蠢的失败。