2016-05-15 74 views
1

我想弄清楚为什么我的while循环没有退出时,我希望它。 基本上我正在制作一个简单的游戏,其中2个玩家玩单词并且每玩一个允许的单词就获得积分。一旦一个玩家玩一个以特定角色结尾的单词,该玩家就会失去游戏。了解Ruby while循环

我这样做的方式是将值设置为false(在循环之前),然后使用while循环让游戏继续进行,直到玩家输入一个丢失的单词,此时循环应立即退出,而不会去玩家2(目前它的确如此)。 这里基本上是什么我现在(在这一点上,我只是想获得基本的逻辑去):

player1_count = 0 
player2_count = 0 

continue = true 

while continue 
## get input 
    if player1_input[-1] == losing_char 
    continue = false 
    else 
    player1_count += 1 
    end 
##do the same for player 2 
## get input 
    if player2_input[-1] == losing_char 
    continue = false 
    else 
    player2_count += 1 
    end 
end 

,我遇到的问题是,我希望的是,当继续设为假,循环会立即终止,而它会一直持续到当前循环结束,同时获得玩家2的输入(如果玩家1失败),这是我不想要的。我在猜测,要么我对Ruby的循环是如何工作有错误的想法,要么我在编写循环/错误地使用它的地方弄错了一些地方。

有没有办法写while循环它将继续前进,直到我的继续变量设置为false,并让它立即退出,因为我希望?

回答

2

在Ruby(以及所有C风格语言)中,while循环条件仅在迭代开始时被检查。这是设计的,否则它将不得不在每个语句运行后检查条件。

在这种情况下,您应该调用break,而不是使用继续变量,它将立即退出(最内层)循环。所以对于你的代码

player1_count = 0 
player2_count = 0 

while true 
## get input 
    if player1_input[-1] == losing_char 
    break 
    else 
    player1_count += 1 
    end 
##do the same for player 2 
## get input 
    if player2_input[-1] == losing_char 
    break 
    else 
    player2_count += 1 
    end 
end 
+0

你可以使用更习惯的'loop do'而不是'while true'。我会删除'else'并使用一个修饰符 - 如果不是,那么'break if player1_input [-1] == losing_char'。 – Stefan

+0

事实上,这些都会更加地道,但我想保持简单,因为OP似乎是新的红宝石 –