• ベストアンサー

コンパイルできません

次のようなプログラムを作成しましたのですが、コンパイルできなくて困っています。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」というエラーが出てしまいます。どこが間違っているかわかりません。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.4

補足というかなんというか 今回コンパイルが通らない理由は for(int state=0; state < 3; state++); { の;で文が切れてしまっているからです。 分かりやすく書くと { for文 } { switch文 } とカッコで分けられてコンパイラに解釈されているようです。 するとfor文で宣言されたstateはswitch文ではscope外ですので変数が宣言されていませんみたいなコンパイルエラーになるのです。 そこで#02さんがおっしゃるとおりに変更すると { for文{ switch文 } } となるのでstateがswitch文でも使えるようになるのです。 以上#01さんと#02さんの回答をあわせてみました。

mos21
質問者

お礼

丁寧な回答ありがとうございました!!

その他の回答 (3)

  • nana_ko
  • ベストアンサー率19% (89/467)
回答No.3

#1のnana_koです。 ifではなく、for文ですね。 スミマセン(>_<)

  • asaichi
  • ベストアンサー率21% (37/171)
回答No.2

もう解決してしまいましたか? コンパイル確認していませんが、 誤:for(int state=0; state < 3; state++); { 正:for(int state=0; state < 3; state++){ と思われます。

mos21
質問者

お礼

ありがとうございました。

  • nana_ko
  • ベストアンサー率19% (89/467)
回答No.1

switchのstateの変数宣言がされていないせいだと思われます。 if分のstateとswitchのstateは別物ですよ。 同じように考えてはいませんか?

mos21
質問者

お礼

コンパイルできましたー、ありがとうございました。

関連するQ&A