June 2018
Intermediate to advanced
310 pages
6h 32m
English
In Maronic, we would like to count the average score over one thousand games. For that, we have the following data class:
data class AverageScore(var totalScore: Int = 0, var gamesPlayed: Int = 0) { val average: Int get() = if (gamesPlayed <= 0) 0 else totalScore / gamesPlayed}
We were smart: we protected ourselves from any invalid output by checking for divisions by zero.
But what will happen when we write the following code?
val counter = AverageScore()thread(isDaemon = true) { while(true) counter.gamesPlayed = 0}for (i in 1..1_000) { counter.totalScore += Random().nextInt(100) counter.gamesPlayed++ println(counter.average)}
Soon enough, you'll receive ArithmeticException anyway. Our counter somehow becomes zero.
If you want ...
Read now
Unlock full access