skip to Main Content

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")
    }

2

Answers


  1. 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) ) {...}
    
    Login or Signup to reply.
  2. This will evaluate to 0

    i % 5 == 0 
    

    executing your

    arrayOfSelected.add(i) 
    

    which will add 0

    I’d suggest add another condition 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]
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search