2017-09-23 63 views
4

我一直在試圖爲表達成科特林產生該序列翻譯一個Java:科特林環具有不規則步驟

1,2,4,8,16,32,64

這是Java代碼:

for(int i = 1; i < 100; i = i + i) { 
    System.out.printf("%d,", i); 
} 

我發現翻譯成科特林這個問題的唯一辦法是:

var i = 1 
while (i < 100) { 
    print("$i,") 
    i += i 
} 

我試圖使用步驟表達式,但這似乎不起作用。有沒有什麼方法可以在Kotlin中更優雅地表達這種類型的序列?

我知道你能有這樣一個使用科特林+的Java代碼9:

Stream.iterate(1, { it <= 100 }) { it!! + it }.forEach { print("$it,") } 

但是這依賴於Java庫和我寧願科特林機庫。

回答

7

可以使用generateSequence函數創建一個無限序列,然後用takeWhile在一個特定的值來限制它,然後用forEach代替for-in結構來處理每個迭代:

generateSequence(1) { it + it }.takeWhile { it < 100 }.forEach { print("$it,") }