Ruby if / elsif / else

时间:2013-11-21 21:53:33

标签: ruby

我正在尝试写游戏。在下面的代码中,即使输入了有效的整数,它也会一直跳到底部else。为什么呢?

puts 'You will be O\'s and I will be X\'s'
puts
puts '1,2,X'
puts '4,5,6'
puts '7,8,9'
puts 
puts 'Your move...'
puts
moveOne = gets.chomp
if moveOne == 5
    puts =  '1,2,X'
    puts =  '4,O,6'
    puts =  'X,8,9'
elsif moveOne == 1
    puts  = 'O,2,X'
    puts  = '4,5,6'
    puts = 'X,8,9'
elsif moveOne == 7
    puts  = 'X,2,X'
    puts  = '4,5,6'
    puts  = 'O,8,9'
elsif moveOne == 9
    puts  = 'X,2,X'
    puts  = '4,5,6'
    puts  = '7,8,O'
elsif moveOne == 2
    puts  = '1,O,X'
    puts  = '4,X,6'
    puts  = '7,8,9'
elsif moveOne == 4
    puts  = '1,2,X'
    puts  = 'O,X,6'
    puts  = '7,8,9'
elsif moveOne == 6
    puts  = '1,2,X'
    puts  = '4,X,O'
    puts  = '7,8,9'
elsif moveOne == 8
    puts  = '1,2,X'
    puts  = '4,X,6'
    puts  = '7,O,9'
else
    puts'please enter a number!'
end
puts
puts 'Your move again'

2 个答案:

答案 0 :(得分:2)

因为chomp给你一个字符串,而不是一个整数。

moveOne = gets.chomp.to_i

答案 1 :(得分:1)

这种情况正在发生,因为gets.chomp会返回字符串,而不是整数。如果你这样做:

"a".to_i - > 0,您的程序可能认为用户实际输入了0。

首先,您要确保用户输入的内容是数字字符,即使它是类字符串

以下是您可以做的事情:

1 - 创建一个方法,检查String是否类似数字:

def is_a_number?(s)
  s.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true 
end

2 - 如果是数字,只需使用.to_i

将其强制转换为整数

所以,你的代码看起来像是:

moveOne = gets.chomp
if is_a_number?(moveOne)
  number_entered = moveOne.to_i
  if number_entered == 5
    ...
  elsif number_entered == 1
    ...
else
  puts "enter a number..."
end