public static Worker[ ] workers; //Что это??? Почему Worker это массив, почему мы не указываем тип, к примеру тот же int, как так, почему создание массива начинается с загадочного Worker? Что это вообще такое!?
Игорь Топоров
14 уровень
ЧТО ЭТО ТАКОЕ?
Решен
Комментарии (26)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Игорь Топоров
3 февраля 2022, 21:27
Спустя пару дней, случилось прозрение, открыл книгу Шилдта, где он обьясняет про классы, и всё стало на свои места. Теперь я понял, что мы создаём реальные обьекты с которыми можем взаимодействовать, мы можем даже взять к примеру 50 рабочих и отправить их на помощь к воинам. Тут получается создаём обьект вот такой командой: Worker workers = new Worker(); Но здесь мы просто создали один обьект, чтобы их было много и используем массив с циклом, создём массив типа Worker: public static Worker[ ] workers; Теперь мы можем создавать смело цикл в котором с каждом циклом обьект будет добавлятся: for(int i = 0; i > workers.length; i++){
workers[ i ] = new Worker; //Где: workers[ i ] и есть создание мурааья рабочего, тобишь это выглядет как: Первый цикл - Worker workers0 = new Worker(); Затем на втором цикле - Worker workers1 = new Worker(); потом 3 цикл - Worker workers2 = new Worker(); и так далее...
Но без ваших ответов я бы к этому не пришёл, спасибо вам!
+3
Ksenia VolkovaJava Developer в DXCMaster
2 февраля 2022, 07:44
Worker[] - это и есть тип. Массив объектов типа Worker
Посмотри в коде - там есть class Worker
0
Игорь Топоров
2 февраля 2022, 07:45
Какого он типа? int, String??? Обчно создание массива выглядет так: int[ ] a = new int[10]; Тут очевидно что мы создали массив ''a'' типа int, а как быть с Worker?
Тему массивов очень хорошо изучил, а тут такооое :(
0
Ksenia VolkovaJava Developer в DXCMaster
2 февраля 2022, 07:49решение
Типа Worker.
Вот тип String - он откуда берется? Он существует потому, что в библиотеке (пакете) java.lang существует class String.
Класс - это и есть описание какого-то типа.
Вот в этой задаче описывается тип Worker (существует такой класс).
Solution - тоже класс. И можно объявить переменную типа Solution или массив Solution - Solution[].
+3
Игорь Топоров
2 февраля 2022, 07:50
Понятно, спасибо тебе Ксения, уже не первый раз выручаешь!
0
Игорь Топоров
2 февраля 2022, 08:02
Тогда что это: workers[i] = new Worker(); //Почему здесь уже создаётся МЕТОД Worker? Только он был классом уже теперь и метод? Типо мы можем через метод обратиться к классу?
0
Семён
2 февраля 2022, 08:15
В данном случае Worker() - это конструктор класса Worker, т.е. метод, который создаёт объект класса Worker. Конструкторы всегда называются также как класс.
0
Игорь Топоров
2 февраля 2022, 08:17
Спасибо! Кстати, очень интересный факт, конструкторы мы ещё не проходили
+1
Игорь Топоров
2 февраля 2022, 08:19
Семён, как мы можем обратиться к конструктору, то есть вызвать его?
0
Ksenia VolkovaJava Developer в DXCMaster
2 февраля 2022, 08:22
new Worker()
0
Игорь Топоров
2 февраля 2022, 08:23
ОК
0
Семён
2 февраля 2022, 08:24
Привыкай, тут такое иногда бывает, что сначала нужно подумать что же означает то или иное выражение и только потом даётся объяснение. Может это делается чтобы заинтересовать учащегося я не знаю. Конструктор должен вызываться с помощью ключевого слова new.
0
Игорь Топоров
2 февраля 2022, 08:29
Я обратил внимание на такой подход, и за этого я уже второй день решаю данную задачу :))
0
Игорь Топоров
2 февраля 2022, 08:54
Подтолкни пж, вот моё решение:
for (int i = 0; i < workers.length ; i++) {
new Worker().sendForFood();
}
for (int i = 0; i < soldiers.length; i++) {
new Soldier().sendIntoBattle();
}
Моя логика как работает даный код, берётся первый муравей, после чего вызывается метод. Затем берётся второй муравей и вызывается метод и т.д. Что делаю не так?
0
Ksenia VolkovaJava Developer в DXCMaster
2 февраля 2022, 08:59
Ты не берешь первого муравья. Ты создаешь нового.
0
Игорь Топоров
2 февраля 2022, 09:08
Пожалуйста, покажи мне в моём коде место, где я создаю нового муравья
0
Ksenia VolkovaJava Developer в DXCMaster
2 февраля 2022, 09:10
new Worker()
0
Игорь Топоров
2 февраля 2022, 09:12
Думал таким образом я только ссылаюсь на конструктор, да чтожь такое, а я его создаю получается опять? Как же мне сослаться на методы в другом классе? Они ведь не static
0
Семён
2 февраля 2022, 09:14
Муравей должен браться уже готовый из массива. Обходишь массив и для каждого муравья вызываешь метод. например
0
Ksenia VolkovaJava Developer в DXCMaster
2 февраля 2022, 09:14
Конструктор - это такой специальный метод, который создает новый объект. Ты его вызываешь - значит, создаешь новый объект.
Я вообще не понимаю, зачем тебе понадобился конструктор.
У тебя есть массив объектов. Объекты уже созданы - в методе populate(). Надо брать объекты из массива по очереди - и все.
Например, если бы у тебя был массив чисел - int[] numbers - и тебе надо было бы в цикле вывести все числа на экран, ты бы как это делал?
0
Игорь Топоров
2 февраля 2022, 09:16
for (int a : numbers){ System.out.println(a);}
или for(int a = 0; a < numbers.length; a++) { System.out.println(numbers[a]);
0
Ksenia VolkovaJava Developer в DXCMaster
2 февраля 2022, 09:22
Ну а что тебе мешает то же самое сделать с муравьями? Только не передавать их в System.out.println(), а вызывать у них sendForFood
0
Игорь Топоров
2 февраля 2022, 09:31
Спасибо Семён, спасибо Ксения, всё получилось, надо мне для себя закрепить то, что после номера массива можно сразу же вызвать через точку метод, вот щас сижу репу чешу, я так делал раньше или нет :D
И не думал даже, что я могу так спокойно вызвать НЕ static метод.
Типо здесь переменная массива привязана к конструктору другого класса, поэтому мы так спокойно и вызываем метод другого класса через массив?
0
Семён
2 февраля 2022, 09:58
public static Worker[] workers; - Это массив объектов класса Worker
workers[i] - объект класса Worker хранящийся в массиве на позиции i
у объекта можно вызывать статические и нестатические методы его класса
0
Семён
2 февраля 2022, 10:03
здесь мы инициализируем элемент массива созданным с помощью конструктора объектом, ну а точнее, переменной workers[i] присваиваем ссылку на созданный объект
0
Ksenia VolkovaJava Developer в DXCMaster
2 февраля 2022, 10:17
Типо здесь переменная массива привязана к конструктору другого класса
Да при чем тут конструктор-то? ))
У тебя в массиве лежит объект. Получить из массива нужный объект можно по индексу.
У объекта какого-то класса можно вызвать нестатические методы этого класса.
Если тебя что-то смущает в записи
можно заменить ее на
0