2016-06-12 6 views
1

私は3つのクラス、つまり、ParkingLotとDriverを持っています。 ParkingLotクラスでは、私は最初の何もない場所をチェックして、そこに車のオブジェクトを配置することになっている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; 
} 

は最後に、私は、配列内のすべての車を表示するようになっているParkingLotクラスのshowParkingLotメソッドを持っています:

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

showParkingLotを使用すると、最初のヌルスポット(cars [0])だけでなく、1つのcarオブジェクトが配列内のすべての場所に配置されます(15回出力されます)。なぜ誰かが説明できますか?

答えて

4

駐車場はあなたは単にあなたが休憩の代わりに返すことができMshnikにより示唆されるように編集しコード

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 
     } 
    } 
} 

下記参照、分割する必要が完了したら。例外的な流れを処理するためにポストループを使用することができ、すなわち、駐車のために空きスペースが残っていない場合に使用することができる。

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

トラックを維持するオブジェクトには、2つのタイプがあります。1つの空き領域と駐車する車のセットです。

parkCarは、空のスポットを正しく扱いますが、if (cars[i]==null)cars[i] = car;ですが、駐車する車の数はそこにあります。代わりにif (cars[i]==null && setOfCarsWillingToPark.size() > 0)が必要です。

あなたの方法では1台の自動車しか駐車しないので、1つのスポットが発見されたときにbreakを使用する必要があります。これはメソッドなのでreturnを使うだけです。