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]