[英]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.