0

私はプログラミングを始めたばかりで、Rubyは私の第一言語です。私が取り組んでいる演習の1つは、次のことを行う掛け算の九九を作成することです。

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

にリセットすることはありませb1while2番目のループを見てください。

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つです。

(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 に答える