- 締切済み
プログラムの作り方
Object Day() { Date tm = new Date(); SimpleDateFormat formatter1 = new SimpleDateFormat("E",Locale.getDefault()); String weekX = formatter1.format(tm); SimpleDateFormat formatter2 = new SimpleDateFormat("F",Locale.getDefault()); int weekY = Integer.parseInt(formatter2.format(tm)); String week[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; for(int i=0; i<week.length; i++) { if(week[i] == weekX) { int x = pos_x + (i * pos_len); break; } } int y = pos_y + (weekY * pos_len); return new Point(x,y); } このようなプログラムをしたときに、Point(x,y)のxが未定義ですとエラーが出ます。なぜ未定義なのですか?またどうすれば回避できますか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hyde-la
- ベストアンサー率28% (42/146)
変数xが初期化されない可能性があるからだと思います。 int x = 0; for(int i = 0; i < week.length; i++){ if( ... ){ x = posix + (i*pos_len); break; } } ではどうでしょう? Javaでは、変数が最後まで初期化されない可能性を持っている場合 (つまり、分岐やループ内で初期化されてる場合) こんなエラーを出すんじゃないんでしたっけ?
- punchan_jp
- ベストアンサー率55% (155/280)
int x という宣言が if 文のブロック内にあるためです。ブロック ({ と } で囲まれた部分)内で宣言された変数は、その中でしか 有効でありません。 回避するには、for 文の上に、 int x; と宣言し、if 文の中の int を削除します。
補足
for文の上につけると、xを初期か以前に使用していますとエラーが出ます。
お礼
ありがとうがざいました。 やっと意味がわかりました。