Некорректный вывод массива

имеется следующее задание:

Организовать базу (массив) объектов типа интерфейс, которую заполнить объектами описанных типов вперемежку (по желанию пользователя). Выполнить следующие действия:

  • вывести полную информацию обо всех объектах массива;

  • найти в массиве объекты, функциональный метод которых возвращают одинаковый результат, поместить такие объекты в другой массив;

  • разбить исходный массив на два массива, в которых будут храниться однотипные элементы;

Моя проблема заключается в том, что я прописал заполнение массива случайными объектами, однако, когда я хочу вывести этот массив на экран, мне всё время выдают разные результаты. Мой код:

Сам интерфейс:

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");
 }
}

Пример работы программы:

  1. Заполняю массив и сразу вывожу его в консоль: https://prnt.sc/113e6n6
  2. Получаю результат: https://prnt.sc/113e7qn
  3. Пытаюсь опять вывести все объекты массива: https://prnt.sc/113e8zj
  4. Иии... Получаю совершенно другие результаты: https://prnt.sc/113e9cx

Честно, не знаю, в чём может быть проблема, преподаватель в университете тоже развёл руками, поэтому буду рад любой критике, замечаниям и предложениям. Заранее благодарю.


Ответы (0 шт):