- ベストアンサー
シンボルを解決できません。 と出るんですが・・・
どうすればいいんでしょうか。。 Kada5.java41:シンボルを解決できません。 シンボル:変数 i 場所 :Kada5の クラス if(i == 10){ ^ エラー1個 と表示されて、先に進むことが出来ません。 このエラーはどういうえらなのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
他の方への補足より: for (int i = 0; i < 10; i++){・・・・・・・ } if(i ==10){・・・・・・・・} 変数が使える範囲 (「スコープ」) を意識しなくっちゃね。int 型の i という変数は、for ループの中で宣言してあるから、for ループの中でしか使えない。for ループを出た後で i を使おうとしても、もう使用期限が切れているということ。 int i; for (i = 0; i < 10; i++){・・・・・・・ } if(i ==10){・・・・・・・・} こういう風にループの外で宣言しておくと、ループを出た後でも変数は生き残っている。
その他の回答 (3)
- pcbeginner
- ベストアンサー率46% (261/560)
変数にはスコープ(有効範囲)があります。 メソッドの中で宣言された変数はそのメソッド内でしか使用できません。 クラスの中で使おうと思ったら、メソッドの外でクラス変数として宣言しないと使用できません。 じゃぁ、メソッド内で宣言すれば、同じメソッド内でどこでも使えるかというとそうではなくて、 対応する「{」と「}」の中でしか使えません。 (メソッドも「{」と「}」でくくっていますね。) ですので、 >for (int i = 0; i < 10; i++){・・・・・・・ >} とfor文で宣言しているのであれば、そのfor文の中でしか使えません。 for文の外でも使いたいのであれば int i; //for文の外で宣言 for(i = 0;i < 10;i++){ //宣言は外に出したので初期値のみ設定 } if(i == 10){ //ここでも使えるようになる としないとだめですね。 他にも for(int i = 0;i < 10;i++){ //…(1) //iが0~9について処理 } for(int i = 0;i < 20;i++){ //…(2) //iが0~19について処理 } とすると(1)のiと(2)のiは別物で、それぞれのfor文の中でのみ有効です。 また try{ int i = 0; //入力値(inputNumber)を数値に変換 i = Integer.parseInt(inputNumber); }catch(NumberFormatException){ //変換できなかった場合の処理 i = -1; //変換できなかった場合は-1とする } としようとしても、 int i は try{~} の中でしか有効でないため、 catch{~} の中では使えません。 もうお解かりでしょうか、上記の場合は try{~}の外でint iを宣言しないといけません。
お礼
丁寧に有難うございます! とても勉強になりした! ありがとうございました。
- tatsu99
- ベストアンサー率52% (391/751)
(1) >for (int i = 0; i < 10; i++){・・・・・・・ >} (2) >if(i ==10){・・・・・・・・} ←問題の箇所です (1)と(2)は、同じメソッド内ですか? メソッド1 { (1) } メソッド2 { (2) } のようになっていませんか? もし、そうでしたら、(2)でもint i;としてください。
お礼
習い始めたばかりなので、メソッドがいまいちわかっていませんでした。 今回の質問の回答のおかげで完全理解に一歩近づけました!ありがとうございました!
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
良くわからないのですが、 変数を宣言してから使ってますか?
補足
はい、この前の for (int i = 0; i < 10; i++){・・・・・・・ } if(i ==10){・・・・・・・・} ←問題の箇所です という具合にforのところで宣言しているんですが、それがいけないんでしょうか・・?
お礼
は~、なるほど! for(){}で設定した変数はその中でしか通用しないのですね。そのへん、よくわかっていませんでした 丁寧にありがとうございました。 さきほどのプログラムは無事完成いたしました^^