Game on numeric arrays
for (int i=0; i &lt; initial.size()-1; i++) {  
            if (i &gt; 0 &amp;&amp; initial.get(i-1) == 0 &amp;&amp; initial.get(i+1) == 0) {
                current = current.turn();
                winner = current;
                initial.remove(i);
                i = 0;
            }
        }



You don't need to do initial.size() - 1 on each iteration.  Consider 

        for (int i = 2; i &lt; initial.size(); i++) {  
            if (initial.get(i) == 0 &amp;&amp; initial.get(i - 2) == 0) {
                current = current.turn();
                initial.remove(i - 1);
                i = 1;
            }
        }


This starts with the third element.  If it's not a 0, then there is no reason to check other values.  No math needed.  If it is a 0, then it verifies that the element two places prior is a 0.  Only then does it proceed to processing.  

Note that setting i to 1 means that it will be 2 again for the next iteration.  There were actually offsetting mistakes in the original code that made it work.  You don't need i to ever be 0, so setting i to 0 and then incrementing to 1 worked.