0

我是编程新手,Ruby 是我的第一语言。我正在进行的一项练习是创建一个执行以下操作的乘法表:

1x1 = 1
1x2 = 2
(etc)
2x1 = 2
2x2 = 4

我想我会通过创建一个嵌套的 while 循环来做到这一点:

a = 1
b = 1

while a <= 5
    while b <= 5
        puts "#{a} * #{b} = #{a * b}"

        b += 1
    end
    a += 1  
end

当我运行脚本时,它会打印第一组时间表(1x1 - 1x5)然后停止。它不会迭代父循环。我究竟做错了什么?

4

4 回答 4

4

你说你是一个新手,所以while现在循环是可以的。但是,当您提高编程和 Ruby 技能时,您应该能够编写更多地道的代码。沿着这些思路:

puts [*1..5].product([*1..5]).map { |x, y| "#{x} * #{y} = #{x*y}" }.join("\n")
于 2012-12-18T13:51:55.717 回答
2

您永远不会将您的重置b1. 看第二个while循环:

while b <= 5:
    ...
    b += 1

在这个循环结束时b = 6, 和循环退出。然后a += 1执行,我们的外循环开始。但是,在所有下一个内部循环迭代b = 6中,因此不会执行。因此你需要:

...
end
a += 1
b = 1
于 2012-12-18T04:33:02.360 回答
0

接受的答案中解释的“簿记错误”很容易制作。这是该each方法通常优于while循环的原因之一:

(1..5).each do |a|
  (1..5).each do |b|
    puts "#{a} * #{b} = #{a * b}"
  end
end

不记账!

于 2012-12-23T22:17:54.623 回答
0
class MultiplicationTable
i=1
j=5
while i <= j
    (1..12).each do |x|
        puts "#{i} * #{x} = #{i*x}"
    end
    i+=1
end

结尾

于 2015-07-24T17:29:58.277 回答