while (true)
{
int a = Integer.parseInt(reader.readLine());
if (a<=1 && a>=999) {
String s123, odd;
if (a >= 1 && a < 10)
s123 = "однозначное ";
else if (a >= 10 && a < 100)
s123 = "двузначное ";
else if (a >= 100 && a <= 999)
s123 = "трехзначное ";
if (a%2 ==0)
odd = "четное ";
else
odd = "нечетное ";
System.out.println(odd + s123 + "число");
}
}
друзья, подскажите, почему при вызове sout переменная s123, что внутри него "might have not be intialized"
я уже, в принципе нашел другое решение, но хочется разобраться в этом моменте.timaxoff
13 уровень
не объявлена переменная, почему?
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
--------Master
22 января 2019, 14:34решение
Назовешь хоть одно число, которое одновременно меньше 1 и больше 999 ?
По инициализации - значение переменной у тебя присваивается только при выполнении определенных условий (каких именно - компилятор не проверяет), а для вывода в консоль требуется однозначная гарантированная инициализация
+2
timaxoff
22 января 2019, 14:38
о, вот такой глупый косяк я не заметил, спасибо.
но s123 в sout все еще не инициализируется
0
--------Master
22 января 2019, 14:42решение
В подобной ситуации можно или написать String s123 = "" - инициализировать сразу при объявлении, или заменить последний else if просто на else, т.е. блок, выполняемый в любом случае при невыполнении всех условий выше.
+2
timaxoff
22 января 2019, 14:45
все, благодаря тебе и твоей внимательности разобрался.
во втором случае условие выполнялось при заданных значениях а, и при этом при таких же условиях пыталось назначить различные переменные.
в итоге вот этот код работает корректно
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+1