Задача решается при использовании for.
Но не работает с while.
Почему?
Выложил частичный код решения из задачи.
for (int a=0; a<50000; a++){
Cat cat = new Cat();
Taras
35 уровень
Разница for/while
Решен
Комментарии (16)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Konstantin_B Java Developer
31 октября 2020, 10:09
А разве 50000 объектов с одинаковыми именами - это не кошмар программиста???
к ним же обращаться будет невозможно!
Или я чего-то не понимаю?
0
Дмитрий
12 октября 2020, 11:27решение
Смотри разницу действия циклов:
public static void main(String[] args) {
// напишите тут ваш код
int y = 1;
while(y <=50000) {
Cat cat = new Cat();
Dog dog = new Dog();
cat = null;//вот здесьCatпервый объект становится доступен сборщику мусора
dog = null;//вот здесь первый объект становится доступен сборщику мусора
y++;
}
System.out.println(y);
int i;
for ( i = 1; i <= 50000; i++) {
Cat cat = new Cat();
Dog dog = new Dog();
cat = null;//вот здесьCatпервый объект становится доступен сборщику мусора
dog = null;//вот здесь первый объект становится доступен сборщику мусора
}
System.out.println(i);
}
+3
hidden #2322530
12 октября 2020, 11:35
разницы никакой. обнулять переменные лишнее.
потому что переменные локальные, после каждой итерации они автоматически удаляются, а вместе с ними ссылки на объекты.
0
Дмитрий
12 октября 2020, 12:16
Это верно, :) я показал как работают циклы, но переменные вынес, так как показываю их результирующее значение.
0
Taras Java задачи • Mentor в @javaquiz_mentor
12 октября 2020, 14:33
Я видоизменил код.
int a = 1;
while(a <=50000) {
Cat cat = new Cat();
Dog dog = new Dog();
a++;
И все заработало.
Из этого я понял что в случаи с for. Можно в () все добавлять, перемменые, циклы, ++. В случаи с while в () необходимо добавлять только продолжительность цикла. Переменную необходимо обьявлять заранее и ++ необходимо ниже основного писать.
Спасибо за обьяснение!)
0
Дмитрий
12 октября 2020, 14:39
Все верно. Удачи.
0
Кирилл
12 октября 2020, 11:19
Если конечный исход достижим, т.е. если в цикле while параметра, указанного в круглых скобках, можно достигнуть кодом в теле цикла, то цикл завершиться.
Если у Вас цикл не завершается, то проверьте правильность написания логики.
В данном примере JVM точно знает когда закончить цикл, т.е. задано условие и каждую итерацию оно проверяется (когда переменная "а" будет строго меньше 50000) и все работает, потому что условие достижимо.
0
Taras Java задачи • Mentor в @javaquiz_mentor
12 октября 2020, 14:24
Соотвественно с while не работает, а с for все окей (подставляем под красное зачеркивание)
P.S. Подскажи есть ли здесь ошибка в логике?![]()
![](/images/comment/e01f3872-bb16-49e4-b986-256e4e9ba3b4/64.jpeg)
0
Taras Java задачи • Mentor в @javaquiz_mentor
12 октября 2020, 14:34
Спасибо за помощь!
Понял из задачи что разная логика с циклами
0
hidden #2322530
12 октября 2020, 11:06
код с while был каким?
0
Taras Java задачи • Mentor в @javaquiz_mentor
12 октября 2020, 14:21
![](/images/comment/6005ed75-3302-4f04-844b-9cab22fd7f7a/64.jpeg)
0
Taras Java задачи • Mentor в @javaquiz_mentor
12 октября 2020, 14:22
Соотвественно с while не работает, а с for все окей (подставляем под красное зачеркивание)
0
hidden #2322530
12 октября 2020, 15:09
я просил код с while, который не ок
0
Taras Java задачи • Mentor в @javaquiz_mentor
13 октября 2020, 13:00
Соотвественно с while не работает, а с for все окей (подставляем под красное зачеркивание)
0
hidden #2322530
13 октября 2020, 13:10
то есть вместо красного зачеркивания ты подставляешь while и тогда оно не работает?
0
Taras Java задачи • Mentor в @javaquiz_mentor
14 октября 2020, 12:14
Да, верно. Если на месте красного for - код работает. Если на месте красного while - код не работает
0