Почему компилятор не видит переменную [c]?
public static void main(String[] args) {
int k, c, j, a, b, d;
j = 10;
b = 2000;
k = 3000;
d = 4000;
a = 1;
if (j < 100) {
if (j < 90)
a = b;
if (k > j)
c = k - j;
} else
c = d;
System.out.println(a);
System.out.println(c);
System.out.println(k);
}
претензия при выводе на печать только к переменной [c]:
The local variable c may not have been initialized
Пример надуманный, речь идет только о видимости переменных, так вот, не пойму, как ее вывести в консоль.
Ответы (2 шт):
Он её видит, но сообщает, что она не инициализирована. Чтобы она инициализировалась, должно выполнится условие. Если, j будет меньше 100 и k <= j, то в переменную "с" не будет записано ни каких значений и будет считана не инициализированная переменная. Компилятор не учитывает значения переменных (j, b, k, d и a) заданных до условий "if" и считает, что переменные в условиях могут иметь разные значения.
Проинициализируйте "с" в самом начале каким-то значением, или измените условия "if", чтобы до считывания в "System.out.println(c);" в эту переменную записывалось значение, например так:
public static void main(String[] args) {
int k, c, j, a, b, d;
j = 10;
b = 2000;
k = 3000;
d = 4000;
a = 1;
с = 0;
if (j < 100) {
if (j < 90)
a = b;
if (k > j)
c = k - j;
} else
c = d;
System.out.println(a);
System.out.println(c);
System.out.println(k);
}
или так:
public static void main(String[] args) {
int k, c, j, a, b, d;
j = 10;
b = 2000;
k = 3000;
d = 4000;
a = 1;
if (j < 100) {
if (j < 90)
a = b;
if (k > j)
c = k - j;
else
c = d;
} else
c = d;
System.out.println(a);
System.out.println(c);
System.out.println(k);
}
The local variable
cmay not have been initialized
Примерно переводится как
Локальная переменная
cможет быть не инициализирована.
Компилятор не уверен, что переменная c будет инициализирована. Допустим, вы пройдете if (j < 100), но тогда будет шанс, что вы завалите if (k > j), и тогда переменная останется неинициализированной.
Речь идет о том, что вы передаете в ф-ю переменную, которая не была инициализирована, а так нельзя. Вообще неинициализированные примитивы использовать в вычислениях нельзя. С объектами то же самое - от них даже стандартные методы нельзя вызывать.
Решений тут два:
1) Инициализировать переменную изначально.
2) Сделать так, чтобы по ходу программы переменная точно инициализировалась.