1

以下のコードは 2,1 を出力します

val n = 3                                       
val i = 3    

for {
  i <- 1 until n
  j <- 1 until i
} println(i+","+j)  

印刷しないでください:

1,1
1,2
1,3
2,1
2,2
2,3
3,1
3,2
3,3

j <- 1 until iは外側のループの内側のループのように見えますが、これは出力によると明らかにそうではありませんか? 上記のループの動作を説明できますか?

4

2 に答える 2

8

iinは、最上位の定義ではなくprintln(i+","+j)i 境界を参照しますi <- 1 until nval i = 3

注意すべきもう 1 つのこと1 until nは、範囲1..n-1であって、 ではありません1..nto上限を含めたい場合に使用する必要があります。

于 2013-11-09T12:06:18.733 に答える
2
  • y <- 1 まで 1であるため、x の最初の反復は省略されます
  • x = 2 およびy <- 1 から 2になるため、2 回目の反復では 2,1 が出力されます。

       ╔═══════════╦══════════╦═══════════╦════════════════╗
       ║   Cycle   ║     x    ║     y     ║      print     ║     
       ╠═══════════╬══════════╬═══════════╬════════════════╣
       ║     1     ║     1    ║     1     ║ omit iteration ║    
       ╠═══════════╬══════════╬═══════════╬════════════════╣
       ║     2     ║     2    ║     1     ║     (2,1       ║    
       ╚═══════════╩══════════╩═══════════╩════════════════╝
    
于 2017-01-26T13:28:37.900 に答える