# Condition in for loop

**URL:** <https://discuss.kotlinlang.org/t/condition-in-for-loop/4933>\
**Category:** Uncategorized\
**Created:** [October 9, 2017, 10:01pm UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933 "2017-10-09T22:01:07Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sorry](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@Sorry](https://discuss.kotlinlang.org/u/Sorry)\
**Post date:** [October 9, 2017, 10:01pm UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933/1 "2017-10-09T22:01:07Z")

</div>

Let’s say I want to write:

> for (int i = 2; i\*i \<= n; ++i) {}

Is there a way to write this in Kotlin **without** while?

---

<div class="post-metadata">

**Author:** ![alanfo](https://avatars.discourse-cdn.com/v4/letter/a/bbe5ce/32.png) [@alanfo](https://discuss.kotlinlang.org/u/alanfo)\
**Post date:** [October 9, 2017, 11:33pm UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933/2 "2017-10-09T23:33:09Z")

</div>

There is a way but it’s not very pleasant:

```auto
for (i in 2..Math.sqrt(n.toDouble()).toInt()) {}

```

Frankly, I’d just use `while` for cases such as this.

---

<div class="post-metadata">

**Author:** ![Roman\_Belov](https://avatars.discourse-cdn.com/v4/letter/r/fbc32d/32.png) [@Roman\_Belov](https://discuss.kotlinlang.org/u/Roman_Belov)\
**Post date:** [October 9, 2017, 11:39pm UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933/3 "2017-10-09T23:39:16Z")

</div>

You can do something like this. But I don’t think it’s worth it 😉

```run-kotlin
fun main(args: Array<String>){
      //sampleStart
    val n = 10
    for (i in generateSequence(1) { it + 1 }.takeWhile{ it * it < n })
        println(i)  
      //sampleEnd
}

```

---

<div class="post-metadata">

**Author:** ![ilogico](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/ilogico/32/3725_2.png) [@ilogico](https://discuss.kotlinlang.org/u/ilogico)\
**Post date:** [October 10, 2017, 12:48am UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933/4 "2017-10-10T00:48:55Z")

</div>

Since the only requirement was to do it without `while`:

```
fun main(args: Array<String>) {
    val n = 10
    tailrec fun loop(i: Int): Unit = if (i * i < n ) Unit else loop(i + 1)
    loop(2)
}

```

😉

---

<div class="post-metadata">

**Author:** ![forinil2](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/forinil2/32/2465_2.png) [@forinil2](https://discuss.kotlinlang.org/u/forinil2)\
**Post date:** [October 10, 2017, 7:11am UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933/5 "2017-10-10T07:11:45Z")

</div>

How did you add runnable code to your post?

---

<div class="post-metadata">

**Author:** ![Roman\_Belov](https://avatars.discourse-cdn.com/v4/letter/r/fbc32d/32.png) [@Roman\_Belov](https://discuss.kotlinlang.org/u/Roman_Belov)\
**Post date:** [October 10, 2017, 7:36am UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933/6 "2017-10-10T07:36:50Z")

</div>

You may use `run-kotlin` as a language name in ``` markdown syntax

---

<div class="post-metadata">

**Author:** ![Sorry](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@Sorry](https://discuss.kotlinlang.org/u/Sorry)\
**Post date:** [October 10, 2017, 9:37am UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933/7 "2017-10-10T09:37:48Z")

</div>

This is incorrect, the condition is `p*p <= n` not `p <= sqrt(n)`. But thanks anyway.

---

<div class="post-metadata">

**Author:** ![forinil2](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/forinil2/32/2465_2.png) [@forinil2](https://discuss.kotlinlang.org/u/forinil2)\
**Post date:** [October 10, 2017, 9:50am UTC](https://discuss.kotlinlang.org/t/condition-in-for-loop/4933/8 "2017-10-10T09:50:35Z")

</div>

Thanks
