开发者

Misbehaving Case Statement

开发者 https://www.devze.com 2023-01-07 12:45 出处:网络
I\'m messing around in Ruby some more. I have a file containing a class with two methods and the following code:

I'm messing around in Ruby some more. I have a file containing a class with two methods and the following code:

if __FILE__ == $0

  seq = NumericSequence.new

  puts "\n1. Fibonacci Sequence"
  puts "\n2. Pascal\'s Triangle"
  puts "\nEnter your selection: "
  choice = gets
  puts "\nExcellent choice."

  choice = case
  when 1
    puts "\n\nHow many fibonacc开发者_如何学Ci numbers would you like? "
    limit = gets.to_i
    seq.fibo(limit) { |x| puts "Fibonacci number: #{x}\n" }
  when 2
    puts "\n\nHow many rows of Pascal's Triangle would you like?"
    n = gets.to_i
    (0..n).each {|num| seq.pascal_triangle_row(num) \
       {|row| puts "#{row} "}; puts "\n"}
  end

end

How come if I run the code and supply option 2, it still runs the first case?


Your case syntax is wrong. Should be like this:

case choice
  when '1'
    some code
  when '2'
    some other code
end

Take a look here.

You also need to compare your variable against strings, as gets reads and returns user input as a string.


Your bug is this: choice = case should be case choice.

You're providing a case statement with no "default" object, so the first clause, when 1, always returns true.

Effectively, you've written: choice = if 1 then ... elsif 2 then ... end

And, as Mladen mentioned, compare strings to strings or convert to int: choice = gets.to_i

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号