我正在尝试写游戏。在下面的代码中,即使输入了有效的整数,它也会一直跳到底部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'
答案 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