Задачку решила, делала по лекциям, в лекциях они объявляют переменную s (String s;) до начала цикла (в методе), а инициализруют ее только в цикле.
По лекциям:
String s;
do
{
s = console.nextLine();
}
while (условие);
Делала также, в результате вылетала ошибка и я не понимала в чем проблема, опытным путем дошла до этого, в итоге, перепробовав несколько попыток, хотя зная это раньше, решила бы с первого раза. Так в чем вопрос, ошибка в лекциях или я чего-то не понимаю?
Loral
6 уровень
почему нельзя объявить переменную в методе, а инициализировать ее только в цикле?
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Flexo Bending Unit #3370318
27 апреля 2021, 20:06
ну с этим циклом из вашего примера так можно: переменная инициализируется в первый проход цикла, и даже если в условии переменная фигурирует, она уже будет определена. цикл do...while тем и отличается, что проверка на выполнение условия идёт после первого прохода цикла.
а вот тут такое не прокатит:
сначала идёт проверка объекта, записанного в s, на равенство определённой строке, и только потом мы s задаём. Этот код невалидный, он не скомпилируется. (При этом по тексту ошибки, который выдаётся компилятором, можно понять, в чём дело, никогда не пренебрегайте чтением отчётов об ошибках). Так нельзя, если мы собираемся вызвать какой-то метод у объекта (например, .equals()), объект должен быть перед этим обязательно задан. +2
Loral
27 апреля 2021, 20:44
Спасибо, да, я читала, у меня был код как в моем примере, но выдавал ошибку что s не инициализирована, хотя она была инициализирована в теле цикла do-while и объявлена в методе.
0
Flexo Bending Unit #3370318
27 апреля 2021, 20:59
а этот код у вас выдаёт ошибку, что переменная не была проинициализирована? (не должен)
+1
Ksenia Volkova Java Developer в DXC Master
27 апреля 2021, 21:06
Ошибка могла бы быть, если бы там был не do-while, а просто while.
0
Ksenia Volkova Java Developer в DXC Master
27 апреля 2021, 19:28
почему нельзя объявить переменную в классе, а инициализировать ее только в цикле?
Наверно, все же не в классе, а в методе? судя по примеру...
Можно по-разному. Приведи код, где не работает - посмотрим, в чем там проблема.
+2
Loral
27 апреля 2021, 20:48
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int number = n;
String s;
do
{
s = sc.nextLine();
System.out.println(s);
number--;
}
while ((n > 0 && n < 5) && (number > 0));
У меня был такой код, но почему-то выдавал ошибку, что s не инициализирована. как только я перенесла s = sc.nextLine(); из тела цикла do-while в метод, все решилось. вот и возник вопрос.
0
Ksenia Volkova Java Developer в DXC Master
27 апреля 2021, 21:05
Не вижу тут никаких проблем с инициализацией переменных.
Тут есть две другие проблемы. Во-первых, при использовании nextLine после nextInt сначала будет считываться пустая строка. В этом случае вместо
лучше использовать, например
Во-вторых, если я правильно помню задание, внутри цикла ничего считываться не должно. Нужно считать только одну строку. +3
Loral
28 апреля 2021, 19:48
Спасибо, начну изучать доп. материалы, чтобы лучше вовсе вникнуть
0