Передача нескольких массивов объектов Java другому методу - PullRequest
0 голосов
/ 09 июня 2018

Я только начал изучать Java, с небольшим опытом работы с Python и небольшим количеством JavaScript, но не использовал классы.У меня есть проблема с этим кодом (только для справки, ниже я указываю точную проблему):

public class Race {
    Boolean isThereABrokenTruck = false;
    private Car[] cars;
    private Motorcycle[] motorcycles;
    private Truck[] trucks;
    private void createVehicles() {
        cars = new Car[10];
        motorcycles = new Motorcycle[10];
        trucks = new Truck[10];

    } // creates 10 cars, 10 trucks and 10 motorcycles.

    private void simulateRace() {
        Weather.setRaining();
        for (Car car : cars) {
            for (int i = 0; i < 50; i++) {
                car.moveForAnHour();
            }
        }
        for (Motorcycle motorcycle : motorcycles) {
            for (int i = 0; i < 50; i++) {
                motorcycle.moveForAnHour();
            }
        }
        for (Truck truck : trucks) {
            for (int i = 0; i < 50; i++) {
                truck.moveForAnHour();
            }
        }

    } 
    private void printRaceResults() {
        for (Car car : cars) {
            System.out.println("Name: " + car.name);
            System.out.println("\n Distance Travelled: " + car.distanceTraveled);
            System.out.println("\n Type:" + car.getClass().getName());
        }
        for (Motorcycle motorcycle : motorcycles) {
            System.out.println("Name: " + motorcycle.name);
            System.out.println("\n Distance Travelled: " + motorcycle.distanceTraveled);
            System.out.println("\n Type:" + motorcycle.getClass().getName());
        }
        for (Truck truck : trucks) {
            System.out.println("Name: " + truck.name);
            System.out.println("\n Distance Travelled: " + truck.distanceTraveled);
            System.out.println("\n Type:" + truck.getClass().getName());
        }
    } // prints each vehicle's name, distance traveled ant type.

    protected Boolean isThereABrokenTruck() {
        return isThereABrokenTruck;
    }

    public static void main(String[] args) {
        Race race = new Race();
        race.createVehicles();
        race.simulateRace();
        race.printRaceResults();
    }
}

Этот код компилируется (классы Car, Motorcycle и Truck также определены в моем коде, ноне имеет отношения к вопросу), однако я получаю исключение нулевого указателя во время выполнения на

   for (Car car : cars) { // null pointer exception here
        for (int i = 0; i < 50; i++) {
            car.moveForAnHour();
        }
    }

, поэтому я предполагаю, что не присваиваю значение автомобилям должным образом.Я вынужден использовать отдельные методы для создания этих транспортных средств, оперировать ими и выводить результаты на консоль.В Python я бы, вероятно, просто возвращал несколько массивов (или списков) и присваивал их значения различным переменным, но как мне сделать это здесь, в Java?

Ответы [ 4 ]

0 голосов
/ 09 июня 2018

когда вы инициализируете массив, вы заполняете массив нулями.поэтому Car [] cars = new Car [10];означает, что у вас есть массив с 10 нулями.и вы повторяете это.и вы получите NullPointerException здесь car.moveForAnHour ();в createVehicles () вы должны заполнить его объектами.например:

private void createVehicles() {
    cars = new Car[10];
    for(int i = 0; i < cars.length; i++) {
      cars[i] = new Car();
    }

} 
0 голосов
/ 09 июня 2018

Вы создаете переменную cars для хранения 10 экземпляров Car, но не сохраняете никаких значений.Добавьте некоторые значения в массив и попробуйте.

0 голосов
/ 09 июня 2018

Вы инициализируете свой массив транспортных средств:

private void createVehicles() {
    cars = new Car[10];
    motorcycles = new Motorcycle[10];
    trucks = new Truck[10];

}

Но ваш массив теперь содержит только нулевые машины, нулевые грузовики ...

Вам также нужно их инициализировать:

private void createVehicles() {
    cars = new Car[10];
    for (int i = 0; i < cars.length; i++) {
        cars[i] = new Car();
    }
    motorcycles = new Motorcycle[10];
    trucks = new Truck[10];
    // Init other vehicles as well
}
0 голосов
/ 09 июня 2018

начальные массивы в конструкторе

public Race() {
  createVehicles();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...