Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Код на java

Артем Колегов Ученик (165), на голосовании 3 месяца назад
Основной класс. Надо вызвать методы объектов через ArrayList.
import java.util.*;

public class Company {
public void hire(ArrayList array)
{
String hireWorker;
int id = 0;
do {
System.out.println("Какого сотрудника нанять?:\nОператор\nМенеджер\nТоп менеджер");
System.out.println("Введите выйти, для выхода");
Scanner worker = new Scanner( System.in );
hireWorker = worker.nextLine().toLowerCase().trim();
if(hireWorker.equals("оператор"))
{
Operator operator = new Operator();
array.add(id , operator);
int hashId = id + 1;
System.out.println("Вы наняли оператора! Его номер: " + id);
}
else if(hireWorker.equals("менеджер"))
{
Manager manager = new Manager();
array.add(id , manager);
System.out.println("Вы наняли менеджера! Его номер: " + id);
}
else if(hireWorker.equals("топ менеджер"))
{
TopManager topManager = new TopManager();
array.add(id , topManager);
System.out.println("Вы наняли топ менеджера! Его номер: " + id);
}
id++;
}while(!hireWorker.equals("выйти"));
}
public void hireAll(ArrayList array)
{

int id = 0 ;
final int min = 1;
final int max = 3;
Random rn = new Random();
System.out.println("Сколько нанять работников? ");
Scanner amount = new Scanner( System.in );
String workers = amount.nextLine().trim();
int workersCount = Integer.parseInt(workers);
while(workersCount > 0 )
{
int count = rn.nextInt(max - min + 1 ) + min;
if(count == 1)
{
Operator operator = new Operator();
array.add(id , operator);
System.out.println("Вы наняли оператора. Его id: " + id);

}
else if(count == 2)
{
Manager manager = new Manager();
array.add(id , manager);
System.out.println("Вы наняли менеджера. Его id: " + id);
}
else if(count == 3)
{
TopManager topManager = new TopManager();
array.add(id , topManager);
System.out.println("Вы наняли топ менеджера. Его id: " + id);
}
id++;
workersCount--;
}
}
public static int rnd(int min, int max)
{
max -= min;
return (int) (Math.random() * ++max) + min;
}
}
Голосование за лучший ответ
Андрей Панарин Искусственный Интеллект (237705) 4 месяца назад
Когда методом get вы получаете элемент списка ArrayList, в вашем распоряжении находится ссылка типа Object. Она может указывать на абсолютно любой объект, и для компилятора не факт, что это будет объект именно вашего класса.

Допустим, у вас есть класс Worker с методами getName и setName.
 ArrayList array = new ArrayList();
Worker worker = new Worker();
worker.setName("Вася");
array.add(worker);
//array.get(0).getName() - не сработает
Хотя по коду очевидно, что нулевой элемент списка array имеет тип Worker, для компилятора это список объектов типа Object. Поэтому array.get(0) выдаст ссылку на Object, у которой нельзя вызвать метод из класса Worker.

Вы можете привести эту ссылку к типу Worker и потом работать с приведенной ссылкой:
 //Worker q = array.get(0); - не сработает, нужно приведение типа

Worker q = (Worker) array.get(0);
System.out.println(q.getName());
System.out.println(((Worker) array.get(0)).getName()); // Или так
Но каждый раз приводить элемент к конкретному типу замахаешься.

Можно сделать проще. Классы коллекций - это параметризованные типы, им можно указать тип элементов в угловых скобках. Так компилятор будет знать, что объекты всех остальных типов в коллекции не ожидаются. Тогда он сам будет приводить элементы к указанному вами типу.
 ArrayList array = new ArrayList(); 
Worker worker = new Worker();
worker.setName("Вася");
array.add(worker);
System.out.println(array.get(0).getName());
Здесь мы объявили переменную array - ссылку на список объектов типа Worker.
Теперь метод get выдает ссылку типа Worker, а не Object.
Явное приведение к типу Worker уже не требуется: компилятор сделает это за нас.
Похожие вопросы