Home > other >  Conditionals bugged on Android Studio with Kotlin
Conditionals bugged on Android Studio with Kotlin

Time:10-19

I am teaching a simple comparisons on programming, but I have found something odd when I am trying to list all the natural numbers below 10 that are multiples of 3 or 5, when I add the following conditions the number 0 is added, even when specifically is conditional to add numbers if they are different from 0, I have already made invalidate caches and restart to Android Studio. Am I missing something here? Below is the code

 fun multiplesOf() {
        val arrayOfSelected: ArrayList<Int> = arrayListOf()

        for (i in 0..10) {
            if (i != 0 && i % 3 == 0 || i % 5 == 0) {
                arrayOfSelected.add(i)
            }
        }
        Log.i("TAG", "multiplesOf: $arrayOfSelected")
    }

CodePudding user response:

The only bug is in your boolean expression:

Given i=0

i != 0 && i % 3 == 0 // this is false
||
i % 5 == 0 // this is true

This is basic Bool's arithmetic: false or true => true and hence will execute your if's block

Adding parenthesis might help you get the desired outcome:

if ( i != 0 && (i % 3 == 0 || i%5 ==0) ) {...}

CodePudding user response:

This will evaluate to 0

i % 5 == 0 

telling the condition something is true, executing your

arrayOfSelected.add(i) 

which will add 0

I'd suggest add another conditin to continue the loop when i == 0

if (i == 0) {
      continue
} else {
  
    if (i % 3 == 0 || i % 5 == 0) {
          arrayOfSelected.add(i)
    }
}

prints:

multiplesOf: [3, 5, 6, 9, 10]
  • Related