-1

もうすぐ Java クラスの最終試験があり、質問があれば助けてもらいたいと思っていました。以下のサンプルコードについてです。

package test;

public class Exam2Code
{

    public static void main ( String[ ] args )
    {
        Lot parkingLot = new Lot();

        Car chevy = new Car( );
        Car camry = new Car( );
        MotorCycle harley = new MotorCycle( 3 );
        MotorCycle honda = new MotorCycle( );

        parkingLot.park ( chevy );
        parkingLot.park ( honda );
        parkingLot.park ( harley );
        parkingLot.park ( camry );

        System.out.println( parkingLot.toString( ) );
        System.out.println(chevy.getClass());
        System.out.println(camry.getClass());
        System.out.println(harley.getClass());
        System.out.println(honda.getClass());
    }


} 

package test;

public class Vehicle
{

    private int nrWheels;

    public Vehicle( )
        { this( 4 ); }
    public Vehicle ( int nrWheels )
        { setWheels( nrWheels); }
    public String toString (  )
        { return "Vehicle with " + getWheels()
                 + " wheels"; }
    public int getWheels ( )
        { return nrWheels; }
    public void setWheels ( int wheels )
        { nrWheels = wheels; }
}

package test;

public class MotorCycle extends Vehicle
{

    public MotorCycle ( )
        { this( 2 ); }
    public MotorCycle( int wheels )
        { super( wheels ); }


}

package test;

public class Car extends Vehicle
{

    public Car ( )
        { super( 4 ); }
    public String toString( )
    {
        return "Car with " + getWheels( ) + " wheels";
    }
}

package test;

public class Lot
{

    private final static int MAX_VEHICLES = 20;
    private int nrVehicles;
    private Vehicle [] vehicles;

    public Lot (  )
    {
        nrVehicles = 0;
        vehicles = new Vehicle[MAX_VEHICLES];
    }

    public int nrParked (  )
        { return nrVehicles; }
    public void park ( Vehicle v )
        { vehicles[ nrVehicles++ ] = v; }
    public int totalWheels ( )
    {
        int nrWheels = 0;
        for (int v = 0; v < nrVehicles; v++ )
                nrWheels += vehicles[ v ].getWheels( );
        return nrWheels;
    }
    public String toString( )
    {
        String s = "";

        for (Vehicle v : vehicles){
                if(v != null){
                        s += v.toString( ) + "\n";
        }
    }
        return s;
    }
}

質問は、「ロットの公園法でよくあるコーディングの間違いを特定します。このコーディングの間違いをどのように修正しますか?」.私には何が間違いなのかわかりません。私の最初の答えは、これはコピー コンストラクターであり、 clone() メソッドを使用して修正するというものでした。しかし、それがコピーコンストラクターであるかどうかさえわかりません。getClass() を使用してクラスをチェックしたところ、すべて正しいタイプのようです。誰かがこれで私を助けてくれれば幸いです。皆さん、ありがとうございました!

編集:コードを追加しました。

4

3 に答える 3

4

Lot's park メソッドでよくあるコーディングの間違いを特定します。このコーディング エラーをどのように修正しますか?

関連するコードは次のとおりです。

private int nrVehicles;
private Vehicle [] vehicles;

public Lot (  )
{
    nrVehicles = 0;
    vehicles = new Vehicle[MAX_VEHICLES];
}

public void park ( Vehicle v ) { 
    vehicles[ nrVehicles++ ] = v; 
}

ここで私が目にする唯一の「問題」は、複数のnrVehicles車を駐車するときの範囲チェックの欠如です (これは JVM によって暗黙的に行われますが、先生はそれに満足していないと思います)。

public void park ( Vehicle v ) { 
    if(nrVehicles < MAX_VEHICLES) {
      vehicles[nrVehicles++] = v; 
    } else {
      throw new IllegalStateException("Lot full, go find another one!");
    }
}
于 2012-12-16T16:08:57.470 に答える
1

さらに面白い(現実世界の) エラーは、同じ車両が駐車場の複数のスロットに駐車する可能性があることです。

于 2012-12-16T16:21:21.133 に答える
0
Vehicle  chevy = new Car();
Vehicle camry = new Car();
Vehicle harley = new MotorCycle( 3 );
Vehicle honda = new MotorCycle( );
于 2013-12-07T05:29:45.033 に答える