48027


こんばんは。  
今Rubyで簡単な「掛け算の表」を作るのに挑戦しています。  
ですが、Rubyの二重whileが期待した出力をしません。自分なりにRubyのリファレンスでwhileの項目を見たり、Rubyの解説サイトでwhileの欄を見たりして色々弄ってみましたが上手くいきませんでした。

自分が書いたコードはこんな感じです(使ってる言葉とか間違ってたり、コードが汚かったら申し訳ありません)  
[![コード](https://i.stack.imgur.com/KD6Ph.jpg)](https://i.stack.imgur.com/KD6Ph.jpg)

問題の出力はこんなかんじです  
[![出力](https://i.stack.imgur.com/mjs6d.jpg)](https://i.stack.imgur.com/mjs6d.jpg)

ご覧の通り1の段だけ出ていて2~9の段が出力されません...。

自分なりに理解してるプログラムの流れは  
まず`x = 1 y = 1`で変数の初期化をしています。(1の段とかける数1から始めたいから)

[code]

    while x <= 9 do
    
[/code]

は`x = 1`で条件式がtrueなので処理に入ります。  
まず最初の処理は

[code]

    while y <= 9 do
    
[/code]

で、whileの中にwhileを作った形になってます。  
条件式`y <= 9`のwhile文で1*1 ~ 1*9までの結果が出力に出るはずです。  
無限ループを防ぐため`y += 1`。  
この内側のwhileがfalseになって初めて、`puts`が実行され、改行されます。(次の段を表示するため)  
最後に次の段の計算をしたいので`x += 1`で段を進めてます。

それでまた`while x <= 9 do`に来て、条件式がtrueになるので同じ処理が続いてくはずです。

なのに出力結果は1の段しか出ません....

凄く下手で見辛い質問で申し訳ありません。  
自分なりに格闘して探ってみたのですが、解決できません。どうかよろしくおねがいします


CC BY-SA 4.0
2018-08-19T15:27:05.830
47633
2018-09-02T13:20:39.097
29740
question
ruby
Rubyの二重while文が上手く機能しない


while文は条件式だけ書くので、このままだと次の段に行った時に変数yの値が10のままになり、変数yが1に初期化されない。(他言語でfor文を使う場合、for文内に変数初期化がある)  
つまり、内側の`while y <= 9 do`のwhile文は変数yが10なので、falseになり、このように1の段の結果しか処理されない。

解決法としては

[code]

    while x <= 9 do
      while y <= 9 do
       print((x*y).to_s + "")
       y += 1
      end
      puts
      #変数yを1に戻す
      y = 1 
      x += 1
    end
    
[/code]

とする。yの初期化を加えるだけ


CC BY-SA 4.0
2018-08-19T15:41:27.517
47634
2018-08-19T15:41:27.517
29740
47633
answer


変数をaからbまで1ずつ増やしながらループさせる場合、大抵の言語ではもっと適した制御構造があるので、そちらを使いましょう。rubyであれば

[code]

    (1..9).each do |x|
      (1..9).each do |y|
         ...
      end
    end
    
[/code]


CC BY-SA 4.0
2018-09-02T13:20:39.097
48027
2018-09-02T13:20:39.097
5793
47633
answer