2016-06-12 13 views
1

我有3個類 - 汽車,ParkingLot和Driver。 在停車場類,我有一個名爲parkCar方法,應該檢查第一空白處,並將車上的對象有:Java:數組,多個類

public void parkCar(Car car) { 
    for (int i = 0; i < cars.length; i++) { 
     if (cars[i] == null) { 
      cars[i] = car; 
     } 
    } 
} 

在驅動程序類,也應該是它調用的方法該parkCar方法把一個汽車對象的停車位(驅動程序不應該再有車):

public void putCarInParkingSpot(Parkinglot parkingLot) { 
    parkingLot.parkCar(this.car); 
    this.car = null; 
} 

最後,我在這是爲了顯示所有的車陣在停車場類showParkingLot方法:

public void showParkingLot() { 
    for (int i = 0; i < cars.length; i++) { 
     if (cars[i] != null) { 
      System.out.println(cars[i].getModel()); 
     } 
    } 
} 

當我使用showParkingLot時,1個汽車對象被放置在數組中的每個點(打印出15次),而不僅僅是第一個空白點(cars [0])。誰能解釋爲什麼?

回答

4

一旦停車場做了你需要打破,看下面的代碼

public void parkCar(Car car) { 
    for (int i = 0; i < cars.length; i++) { 
     if (cars[i] == null) { 
      cars[i] = car; 
      break; // do not allocate other null spaces with same car, leave space for the next cars 
     } 
    } 
} 

編輯通過Mshnik的建議簡直可以返回,而不是突破。後循環可用於處理異常流量,即在沒有空餘空間用於停車時。

public void parkCar(Car car) { 
    for (int i = 0; i < cars.length; i++) { 
     if (cars[i] == null) { 
      cars[i] = car; 
      return; // do not allocate other null spaces with same car, leave space for the next cars 
     } 
    } 

    System.out.println("Sorry, no space left for parking"); 
    //here you can add code so as to see a parking space at some other place , may be you can have a 2-d array with each row representing a parking space. 
} 
+1

'return'和'break'在這裏一樣好,風格也好一點。一種叫做「parkCar」的方法顯然是停放一輛汽車,所以一旦完成,該方法應該終止。此外,後循環區域被保留用於異常處理(即,沒有任何空地)。 – Mshnik

+0

@Mshnik,我已經包含了這個建議,:)謝謝 –

+1

謝謝:)我沒有學習使用中斷 – anna

0

你有兩種類型的對象要跟蹤:空集合和一組願意停車的汽車。

parkCar正確處理空白點,if (cars[i]==null)cars[i] = car;,但它不檢查願意停車的車有多少。相反,你需要if (cars[i]==null && setOfCarsWillingToPark.size() > 0)

你的方法只停放一輛車,所以你應該使用break當發現一個點。由於這是一種方法,您應該只使用return