- ベストアンサー
コンパイルできません
次のようなプログラムを作成しましたのですが、コンパイルできなくて困っています。img2,img3,img4にはそれぞれ画像データが入っていて、それを順番に表示させながらループさせたいのですけど(^^; public void update(Graphics g) {paint(g);} public void paint(Graphics g){ for(int state=0; state < 3; state++); { switch(state){ case 0: buffer=img2; break; case 1: buffer=img3; break; case 2: buffer=img4; break; } } g.drawImage(buffer,0,0,null); } switch(state){の部分で「シンボルを解釈処理できません。シンボル: 変数 state」というエラーが出てしまいます。どこが間違っているかわかりません。お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
補足というかなんというか 今回コンパイルが通らない理由は for(int state=0; state < 3; state++); { の;で文が切れてしまっているからです。 分かりやすく書くと { for文 } { switch文 } とカッコで分けられてコンパイラに解釈されているようです。 するとfor文で宣言されたstateはswitch文ではscope外ですので変数が宣言されていませんみたいなコンパイルエラーになるのです。 そこで#02さんがおっしゃるとおりに変更すると { for文{ switch文 } } となるのでstateがswitch文でも使えるようになるのです。 以上#01さんと#02さんの回答をあわせてみました。
その他の回答 (3)
- nana_ko
- ベストアンサー率19% (89/467)
#1のnana_koです。 ifではなく、for文ですね。 スミマセン(>_<)
- asaichi
- ベストアンサー率21% (37/171)
もう解決してしまいましたか? コンパイル確認していませんが、 誤:for(int state=0; state < 3; state++); { 正:for(int state=0; state < 3; state++){ と思われます。
お礼
ありがとうございました。
- nana_ko
- ベストアンサー率19% (89/467)
switchのstateの変数宣言がされていないせいだと思われます。 if分のstateとswitchのstateは別物ですよ。 同じように考えてはいませんか?
お礼
コンパイルできましたー、ありがとうございました。
お礼
丁寧な回答ありがとうございました!!