簡體   English   中英

將多個Java對象數組傳遞給另一個方法

[英]Passing multiple arrays of Java objects to another method

我剛開始學習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();
    }
}

該代碼進行編譯(在我的代碼中也定義了汽車,摩托車和卡車類,但與該問題無關),但是我在運行時得到空指針異常

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

所以我想我沒有為汽車正確分配價值。 我被迫使用單獨的方法來創建這些載具,對其進行操作並將結果打印到控制台。 在python中,我可能只是返回多個數組(或列表),並將它們的值分配給不同的變量,但是在Java中該如何做呢?

構造函數中的初始數組

public Race() {
  createVehicles();
}

您初始化車輛數組:

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
}

您正在創建cars變量,以容納10個Car實例,但不存儲任何值。 將一些值添加到數組,然后嘗試。

當您初始化數組時,將使用空值填充數組。 所以Car [] cars = new Car [10]; 表示您有一個包含10個null的數組。 而您正在對此進行迭代。 您將在此處獲得NullPointerException car.moveForAnHour(); 在createVehicles()中,必須用對象填充它。 例如 :

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

} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM