Bird
Raised Fist0
Kotlinprogramming~20 mins

Accessing elements safely in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Safe Access Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of safe access with nullable list?
Consider the following Kotlin code that tries to access an element safely from a nullable list. What will be printed?
Kotlin
val list: List<String>? = listOf("apple", "banana", "cherry")
val fruit = list?.getOrNull(1) ?: "none"
println(fruit)
Anull
Bnone
CIndexOutOfBoundsException
Dbanana
Attempts:
2 left
💡 Hint
Remember that getOrNull returns null if index is out of range, and Elvis operator ?: provides a default.
❓ Predict Output
intermediate
2:00remaining
What happens when accessing a missing key safely in a map?
Given this Kotlin code, what will be the output?
Kotlin
val map = mapOf("a" to 1, "b" to 2)
val value = map["c"] ?: -1
println(value)
A-1
Bnull
C2
DKeyNotFoundException
Attempts:
2 left
💡 Hint
Accessing a missing key in a map returns null, so the Elvis operator provides the default.
🔧 Debug
advanced
2:00remaining
Why does this safe call cause a NullPointerException?
Look at this Kotlin code snippet. It tries to access the length of a nullable string safely but throws an exception. Why?
Kotlin
val text: String? = null
val length = text!!.length
println(length)
AThe !! operator forces a non-null assertion and throws NullPointerException if null
BThe variable text is not initialized
CThe safe call operator ?. is missing, so length is accessed directly
DThe println function cannot print null values
Attempts:
2 left
💡 Hint
The !! operator is a way to say 'I am sure this is not null'.
❓ Predict Output
advanced
2:00remaining
What is the output when chaining safe calls with let?
What will this Kotlin code print?
Kotlin
val name: String? = "Kotlin"
val length = name?.let { it.length } ?: 0
println(length)
AName cannot be null
B0
C6
Dnull
Attempts:
2 left
💡 Hint
let runs the block only if the value is not null.
❓ Predict Output
expert
2:00remaining
What is the output of nested safe calls with a null intermediate?
Analyze this Kotlin code and determine the output:
Kotlin
data class Person(val pet: Pet?)
data class Pet(val name: String?)

val person: Person? = Person(null)
val petNameLength = person?.pet?.name?.length ?: -1
println(petNameLength)
A0
B-1
CNullPointerException
Dnull
Attempts:
2 left
💡 Hint
Each safe call returns null if the previous value is null, so the Elvis operator provides the default.

Practice

(1/5)
1.

What does the Kotlin expression map[key] ?: "default" do?

easy
A. Removes the key from the map if it exists.
B. Returns the value for key if it exists, otherwise returns "default".
C. Throws an error if key is not in the map.
D. Always returns "default" regardless of key.

Solution

  1. Step 1: Understand map access with []

    Accessing map[key] returns the value if key exists, or null if it doesn't.
  2. Step 2: Use the Elvis operator ?: for fallback

    The expression ?: "default" means if the left side is null, return "default" instead.
  3. Final Answer:

    Returns the value for key if it exists, otherwise returns "default". -> Option B
  4. Quick Check:

    map[key] ?: default = safe access with fallback [OK]
Hint: Use ?: to provide a default when key might be missing [OK]
Common Mistakes:
  • Thinking it throws an error if key is missing
  • Assuming it always returns default
  • Confusing with removing keys
2.

Which of the following is the correct Kotlin syntax to safely get the element at index 2 from a list myList, returning -1 if the index is out of bounds?

easy
A. myList.getOrNull(2) ?: -1
B. myList[2] ?: -1
C. myList.get(2) ?: -1
D. myList.getOrElse(2, -1)

Solution

  1. Step 1: Understand safe list access methods

    myList.getOrNull(2) returns the element at index 2 or null if out of bounds.
  2. Step 2: Use Elvis operator for default

    ?: -1 returns -1 if getOrNull returns null.
  3. Final Answer:

    myList.getOrNull(2) ?: -1 -> Option A
  4. Quick Check:

    getOrNull + ?: = safe get with fallback [OK]
Hint: Use getOrNull(index) ?: default for safe list access [OK]
Common Mistakes:
  • Using myList[2] which throws exception if index invalid
  • Using get(2) which throws exception if index invalid
  • Confusing getOrElse syntax
3.

What is the output of this Kotlin code?

val map = mapOf("a" to 1, "b" to 2)
println(map["c"] ?: 0)
medium
A. null
B. 2
C. Exception thrown
D. 0

Solution

  1. Step 1: Check map access for key "c"

    Key "c" does not exist in the map, so map["c"] returns null.
  2. Step 2: Apply Elvis operator

    ?: 0 returns 0 because the left side is null.
  3. Final Answer:

    0 -> Option D
  4. Quick Check:

    map[missingKey] ?: default = default [OK]
Hint: Missing keys return null, use ?: for default [OK]
Common Mistakes:
  • Expecting null to print instead of default
  • Thinking exception is thrown
  • Confusing existing key values
4.

Identify the error in this Kotlin code snippet and choose the corrected version:

val list = listOf(10, 20, 30)
val value = list[5] ?: -1
println(value)
medium
A. val value = list.get(5) ?: -1
B. val value = list[5]
C. val value = list.getOrNull(5) ?: -1
D. val value = list.getOrElse(5, -1)

Solution

  1. Step 1: Understand list access with []

    Using list[5] throws an IndexOutOfBoundsException because index 5 is out of range.
  2. Step 2: Use safe access method

    list.getOrNull(5) returns null if index is invalid, so combined with ?: -1 it safely returns -1.
  3. Final Answer:

    val value = list.getOrNull(5) ?: -1 -> Option C
  4. Quick Check:

    Use getOrNull + ?: to avoid exceptions [OK]
Hint: Replace [] with getOrNull + ?: for safe index access [OK]
Common Mistakes:
  • Using [] which throws exception if index invalid
  • Using get(5) which throws exception
  • Confusing getOrElse syntax
5.

You have a map val scores = mapOf("Alice" to 90, "Bob" to 85) and a list val bonuses = listOf(5, 10). You want to safely get Bob's score and the bonus at index 2, returning 0 if missing, then sum them. Which code correctly does this?

hard
A. val total = (scores["Bob"] ?: 0) + (bonuses.getOrNull(2) ?: 0)
B. val total = (scores.getOrNull("Bob") ?: 0) + (bonuses.getOrNull(2) ?: 0)
C. val total = (scores["Bob"] ?: 0) + (bonuses[2] ?: 0)
D. val total = (scores["Bob"] ?: 0) + bonuses.get(2)

Solution

  1. Step 1: Access map value safely

    scores["Bob"] ?: 0 safely gets Bob's score or 0 if missing.
  2. Step 2: Access list element safely

    bonuses.getOrNull(2) ?: 0 safely gets bonus at index 2 or 0 if out of bounds.
  3. Step 3: Sum the two values

    Adding these two safe values gives the total without errors.
  4. Final Answer:

    val total = (scores["Bob"] ?: 0) + (bonuses.getOrNull(2) ?: 0) -> Option A
  5. Quick Check:

    Safe map + safe list access with ?: for default [OK]
Hint: Use ?: with map and getOrNull for list to avoid errors [OK]
Common Mistakes:
  • Using bonuses[2] which throws exception if index invalid
  • Using getOrNull on map which is invalid
  • Not providing default fallback
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard