Задача простая, но интерес заел.
Подскажите можно ли создать 50000 уникальных котов в таком коде:
public class Solution {
public static void main(String[] args) {
int a=0;
for (int i = 0; i < 50000; i++) {
a++;
Cat cat = new Cat(); // можно ли к имени ссылочной переменной cat добавить значение "а", чтобы получилось 50000 новых переменных с уникальным именем.
}
}
}
Andrei Pilipuk
31 уровень
как в цикле создать 50000 объектов, ссылки на которые будут хранится в ссылочных переменных с уникальным именем cat_a
Решен
Комментарии (12)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Леонид Шевченко
21 мая 2018, 12:19
А в чем проблема? ну и передавай в контруктор Cat("cat_" + a).
Или вы про имя поля?
0
Chocological Software Engineer
21 мая 2018, 12:20
мне кажется он имел ввиду имя ссылки, но могу ошибаться
+1
Andrei Pilipuk
21 мая 2018, 12:52
Я имел ввиду имя переменной для объекта с типом Cat.
Разве может существовать множество переменных одного типа с одинаковым именем?
0
Andrei Pilipuk
21 мая 2018, 13:02
В классе Cat нет поля с именем. только метод finalize.
class Cat {
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("Cat was destroyed");
}
Я спрашиваю как создать в цикле создать 50000 объектов, ссылка на каждый из которых хранится в отдельной переменной с уникальным именем cat_a
0
Chocological Software Engineer
21 мая 2018, 13:11
не совсем понимаю зачем, не помню уже этого задания но мне кажется что его можно решить просто написав new cat(); new Dog();
0
Andrei Pilipuk
21 мая 2018, 13:17
да, я решил его. Просто интерес как в цикле создать условно пять уникальных ссылочных переменных для новых объектов.
Как то так.
0
Chocological Software Engineer
21 мая 2018, 13:23решение
+6
Chocological Software Engineer
21 мая 2018, 12:19
они и так разные, но если тебе нужно к ним обращаться, добавь их в массив или лист и обращайся по индексу
0
Andrei Pilipuk
21 мая 2018, 12:57
Совсем запутался. Можно по порядку.
1. Разве в каждом новом цикле (после первого) в уже созданную переменную cat не присваивается ссылка на новый объект Cat?
2. Правильно ли, что в памяти создается 50000 новых идентичных объектов, ссылок на которые не сохраняется? Только на последний сохраняется ссылка в переменной cat. Так?
0
Chocological Software Engineer
21 мая 2018, 13:04полезный
Область видимости переменной это тело цикла, так что можно
в уже созданную переменную cat Она каждый раз создается при выполнении цикла
После итерации цикла вы теряете эту ссылку и заново ее создаете
+1
Andrei Pilipuk
21 мая 2018, 13:15
Каша в голове. Может коряво спрашиваю, но все же.
1.Если задавать каждый раз уникальное имя cat0, cat1 ... cat49999, то в памяти сохранится 50000 уникальных переменных, ссылающихся на 50000 различных копий класса Cat?
2. А если каждый раз создавать переменную с именем cat, то предыдущая то же сохранится, но она не будет видна из цикла? Разные ячейки памяти будут так?
0
Chocological Software Engineer
21 мая 2018, 13:19
1)Не совсем корректно, это будут не копии а новые обьекты, но если создать Cat cat0 = new Cat();
Cat cat1 = new/..итд
то да; но ума не приложу как это в цикле сделать, точнее там и цикла не нужно)
Она будет действовать только в пределах итерации цикла
но при следующей итерации это будет уже другой кот
Если вам принципиально сохранить на них ссылки то можно создать массив котов и заполнить его +2