This problem can be solved mathematically much better than it can with a list, or collection. What you have is 9 states, and a timer that counts down. The timer can be expressed as a proportion of 1. Because the states are all equally spaced on 1/9 intervals, you can just do math.... So, if the time is \$x\$ and the total time is \$y\$, then the current portion is \$\frac{x}{y}\$ If you multiply this value by 9, you get something on the scale of 0 to 9 inclusive. you really want: <strike> public int tileID(int currentTime, int totalTime, int tileCount) { // we want the shift to happen at less than half-the-time (in the middle of the period). double shift = (1.0 / tileCount) / 2; double progress = (double)currentTime / (double)(totalTime); int tile = (int)(progress * tileCount + shift); return tile; } </strike> `shift` is needed to make the `(int)` truncation work. Your comment has made me think, and, in reality, it is not the most readable/understandable code. In fact it is broken, and shift should just be 0.5 always... Let me re-do it in the form of a `round()` instead of a truncation: public int tileID(int currentTime, int totalTime, int tileCount) { double progress = (double)currentTime / (double)totalTime; int tile = (int)Math.round(progress * tileCount); return tile; } Then, you can use this with: TargetScope tile = TargetScope.values[tileId(this.time, TargetManager.TARGET_SEARCH_WAIT, TargetScope.values[].length)];