预订系统

时间:2011-10-19 21:51:48

标签: ruby

任何人都可以告诉我应该使用什么以及为什么这种方法不正确?代码不起作用,我知道,我只是想知道如何与这种类型的数据接口。

谢谢。

代码:

$i = 1
$f = 0
$c = 0
answer = ""

loop do
    puts "Welcome\n"
    puts "If you'd like to fly in first class, Press 1. For coach, Push 2."
    answer = STDIN.gets
    answer.chop!
    break if answer =~ /1|2/  

    if answer == 1 then
      $i += 1.each
      $available.at(0..4)
    end

    if answer == 2 then
     $i += 1.each
     $available.at(5..19)

    else
      puts "Invalid number, enter 1 or 2."
      Console_Screen.pause
  end
end

puts "Here is your boarding pass. You are in seat " + $i.to_s

2 个答案:

答案 0 :(得分:1)

对于头等舱,您可以这样做:

next_first = (0..4).find { |i| $available[i] != 1 }

如果它给你一个next_available nil,则第一堂课已满,否则你有下一个可用头等舱座位的索引。

同样对于教练:

next_coach = (5..19).find { |i| $available[i] != 1 }

然后,如果您有索引,请检查它是否为nil,并将其存储在$i中,只需$available[$i] = 1以保留座位。

还有一个额外的免费提示,这个:

answer = STDIN.gets
answer.chop!

answer中留下一个字符串,因此answer == 1始终为false。

参考文献:

答案 1 :(得分:0)

问题似乎在这里: break if answer =~ /1|2/ 这意味着“如果我们得到1或2”那么“完全停止并离开循环”

即这意味着如果该人实际输入有效的东西(即1或2),则不会执行任何进行座位分配的代码。

之后出现上面的@mu_is_too_short指出的错误。