Некорректный вывод массива
имеется следующее задание:
Организовать базу (массив) объектов типа интерфейс, которую заполнить объектами описанных типов вперемежку (по желанию пользователя). Выполнить следующие действия:
вывести полную информацию обо всех объектах массива;
найти в массиве объекты, функциональный метод которых возвращают одинаковый результат, поместить такие объекты в другой массив;
разбить исходный массив на два массива, в которых будут храниться однотипные элементы;
Моя проблема заключается в том, что я прописал заполнение массива случайными объектами, однако, когда я хочу вывести этот массив на экран, мне всё время выдают разные результаты. Мой код:
Сам интерфейс:
interface VehicleAndWorkers
{
String cars();
}
Первый класс, реализующий интерфейс:
public class TaxiStation implements VehicleAndWorkers{
TrucksLogistic trucks = new TrucksLogistic();
public String[] cars = {"KIA", "Hyundai", "Volkswagen", "Lada", "Datsun", "Skoda"};
int quantCars = 150;
int workers = 300;
public String cars() {
System.out.println("Список моделей нашего таксопарка: ");
for (int i = 0; i < cars.length; i++) {
System.out.println(cars[i]);
}
return null;
}
@Override
public boolean equals(Object obj)
{
return trucks.quantTrucks == this.quantCars;
}
@Override
public int hashCode() {
return Objects.hash(trucks, quantCars);
}
@Override
public String toString() {
return cars();
}
}
Второй класс, реализующий интерфейс:
public class TrucksLogistic implements VehicleAndWorkers {
String[] trucks = {"Kenworth W900", "Volvo FH16", "Scania R730", "MAN TGS 18.400", "МАЗ 6430",
"КАМАЗ-5490 НЕО 2"};
int quantTrucks = 40;
int workers = 100;
public String cars()
{
System.out.println("Список моделей нашей компании: ");
for (int i = 0; i < trucks.length; i++)
{
System.out.println(trucks[i]);
}
System.out.println("Количество работников: " + workers);
System.out.println("Количество грузовиков:" + quantTrucks);
System.out.println("Отношение количества моделей грузовиков к количеству грузовиков: " + Math.round(trucks.length / quantTrucks));
return null;
}
@Override
public String toString() {
return cars();
}
}
Класс, в котором я пытался реализовать работу с ArrayList (заполнение, отображение и т.д.):
public class InterfaceArray {
ArrayList<VehicleAndWorkers> array = new ArrayList<>();
public void setArray() {
int randomLength = (int) Math.floor(random() * 10);
for (int i = 0; i < randomLength; i++) {
Random random = new Random();
int minRandomNum = 1;
int maxRandomNum = 2;
int diffRandomNum = maxRandomNum - minRandomNum;
int randomNum = random.nextInt(diffRandomNum + 1) + minRandomNum;
if (randomNum == 1) {
array.add(new TrucksLogistic() {
@Override
public String cars() {
int num = (int) Math.floor(random() * trucks.length);
quantTrucks = (int) Math.floor(random() * 100);
Random random = new Random();
int minWorkers = quantTrucks;
int maxWorkers = 200;
int diffWorkers = maxWorkers - minWorkers;
workers = random.nextInt(diffWorkers + 1);
workers += minWorkers;
System.out.println("Количество грузовиков: " + quantTrucks);
System.out.println("Количество работников: " + workers);
System.out.println("Среднее количество работников на 1 грузовик: " + Math.round(workers / quantTrucks));
return "Приоритетная марка/модель грузовика: " + trucks[num];
}
});
} else {
array.add(new TaxiStation() {
@Override
public String cars() {
int num = (int) Math.floor(random() * cars.length);
quantCars = (int) Math.floor(random() * 100);
Random random = new Random();
int minWorkers = quantCars;
int maxWorkers = 200;
int diffWorkers = maxWorkers - minWorkers;
workers = random.nextInt(diffWorkers + 1);
workers += minWorkers;
System.out.println("Количество легковых автомобилей: " + quantCars);
System.out.println("Количество работников: " + workers);
System.out.println("Среднее количество работников на 1 автомобиль: " + Math.round(workers / quantCars));
return "Приоритетная марка/модель легкового автомобиля: " + cars[num];
}
});
}
}
}
public void getArray() {
for (VehicleAndWorkers element : array) {
System.out.println("");
System.out.println(element);
System.out.println("");
}
}
public void sameElements() {
//// Set<VehicleAndWorkers> arrayTwo = new LinkedHashSet<>(array);
//// for (VehicleAndWorkers element : arrayTwo)
//// System.out.println(element + "\n");
//
// for (int element = 0; element < array.size() - 1; element++)
// {
// for (int i = element + 1; i < array.size(); element++)
// {
// if (array.get(element).equals(element + 1))
// {
// arrayTwo.add(array.get(element + 1));
// }
// }
// array.remove(array.get(element));
// }
// for (VehicleAndWorkers element : arrayTwo)
// System.out.println(element.toString());
}
public void sameTypeElements() {
ArrayList<VehicleAndWorkers> arrayTwo = new ArrayList<>();
// for (VehicleAndWorkers element : array)
// {
// if (element)
// }
}
}
Ну и класс, в котором применяются методы из предыдущего класса
public class ConsoleInterface {
void doChoice()
{
InterfaceArray interfaceArray = new InterfaceArray();
printOptions();
Scanner scan = new Scanner(System.in);
int choice = scan.nextInt();
while (choice >= 0 && choice < 5) {
if (choice == 0) {
interfaceArray.setArray();
interfaceArray.getArray();
printOptions();
choice = scan.nextInt();
}
else if (choice == 1) {
interfaceArray.setArray();
printOptions();
choice = scan.nextInt();
}
else if (choice == 2) {
interfaceArray.sameElements();
printOptions();
choice = scan.nextInt();
}
else if (choice == 3) {
interfaceArray.sameTypeElements();
printOptions();
choice = scan.nextInt();
}
else if (choice == 4) {
interfaceArray.getArray();
printOptions();
choice = scan.nextInt();
}
}
}
void printOptions()
{
System.out.println("Выберите действие: \n");
System.out.println("0 - Заполнить массив случайными элементами и вывести его на экран. \n");
System.out.println("1 - Заполнить массив случайными элементами. \n");
System.out.println("2 - Найти в массиве объекты,\n" +
" функциональный метод которых возвращает одинаковый результат. \n");
System.out.println("3 - Разбить исходный массив на два массива,\n" +
" в которых будут храниться однотипные элементы. \n");
System.out.println("4 - Вывести массив(-ы) на экран. \n");
System.out.println("Любая клавиша - Выйти из приложения. \n");
}
}
Пример работы программы:
- Заполняю массив и сразу вывожу его в консоль: https://prnt.sc/113e6n6
- Получаю результат: https://prnt.sc/113e7qn
- Пытаюсь опять вывести все объекты массива: https://prnt.sc/113e8zj
- Иии... Получаю совершенно другие результаты: https://prnt.sc/113e9cx
Честно, не знаю, в чём может быть проблема, преподаватель в университете тоже развёл руками, поэтому буду рад любой критике, замечаниям и предложениям. Заранее благодарю.