case 1 に飛んだ場合はいいけど、
case 2 に飛んだ場合は i が使えるのに
初期化の位置を飛ばしてしまう。
だから、そういうことはできないようになってる。

case 1: {
 int i = 1;
} break;

みたいにブロックで囲むといいよ。