まず、他の方も仰っているように、エラ―メッセージは省略せずに出しましょう。
エラ―メッセージはヒントの宝庫です。というか、コンパイラ等からのメッセージです。
もしかしたら別の理由(後に書かれているメッセージ)が原因だったり、省略されているものの中にヒントが隠されていることがあるからです。
で、今回の質問ですが、単純に
Java
1import java.util.*;
2
3public class Main {
4 public static void main(String[] args) throws Exception {
5 int y = 1;
6 int x;
7 x = ++y;
8 System.out.println(x);
9 }
10}
のようにする場合は確かにxの値が出力されます。ですが、
Java
1import java.util.*;
2
3public class Main {
4 public static void main(String[] args) throws Exception {
5 int y = 1;
6 int x;
7 if( y == 1 ){
8 x = ++y;
9 }
10 System.out.println(x);
11 }
12}
のようにif文等で設定する場合、初期値が設定されていない場合はエラーになるようです。
ちなみに今回のx = ++y;
のような処理は初期化とは言いません。代入です。初期化とは、宣言と同時に設定するやつです。int a = 100;
のような。別物です。
で、なぜ今回の場合、エラーになるのか。それは『分岐処理があるから』です。今回の場合、たまたまtrueになる条件式でした。でもこれがユーザ入力によって変化するとかだとどうなるでしょうか。
(私がサンプルとして提示した)コードを読んでみましょう。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// 変数y を 初期値1として宣言 (宣言&初期化)
int y = 1;
// 変数xを宣言
int x;
// y が 1 なら
if( y == 1 ){
// xの値は y + 1 した値である(yも +1している)
x = ++y;
}
// 出力する
System.out.println(x);
}
}
これが、仮に ユーザ入力で y = 2 だったらどうなるでしょうか。
if文の条件 ( y == 1 ) を満たさないのでスルーして 出力します。
そうなると初期化していない変数を使おうとしているから、『error: variable b might not have been initialized』のようなエラーを吐きます。
まあ、Javaのおせっかいですね。