I really hate problems like this. Asking what happens when intentionally confusing code is written loses the point that
you should always strive for clarity.
Anyway, here's what is happening:
The first time the switch statement is hit, the value of i is 0. That doesn't match any of the case statments. It doesn't match '0', because that is a character, and when view as an integer, its value is 48, the ASCII value of the character 0. Therefore nothing is printed.
i is incremented twice, once by the incrementer in the switch statement, then by the for loop incrementer. The next switch uses a value of i = 2. That matches a case, so "3" is printed out. (Did I mention I hate this code.)
i is incremented twice more, so it has a value of 4. That matches a case so "5" is printed out. There is no break, so execution falls through to the case 'E' as well and prints out "6". The value of i after the switch is 5, so the loop terminates and we're done.