0

このレーサープログラムを機能させるのにあらゆる種類の困難があります。抽象メソッドを持つ抽象レーサー クラスと、そこから派生した他の 2 つのクラスがあります。

メインプログラムクラスで配列を取得しましたが、エラーが発生しindex [0][1]

配列サイズは変数宣言で指定できません ('new' 式で初期化してみてください)

次に、クラス、構造体、またはインターフェイスのメンバー宣言で
無効なトークンを示す = 記号のエラー'='

新しい Racer は型を返さなければなりません

メインクラスは

public class Program
{
    ApplicationUtilities.DisplayApplicationInformation();
    ApplicationUtilities.DisplayDivider("Start Racer Program");
    ApplicationUtilities.DisplayDivider("Prompt for Racer information and create first Racer");

        Racer[] myarray = new Racer[2];
        myarray[0] = new Racer(HotRod);
        myarray[1] = new Racer(StreetTuner);

    public CollectRacerInformation(HotRod);
}

抽象 Racer クラスは

public abstract class Racer
{
    private string racerName;
    private int racerSpeed;
    private Engine engine;

    public Racer();

    public Racer(string name, int speed, Engine engine);


    Engine engine();
    public abstract bool IsDead();
}

私の派生した HotRod クラスは

public class HotRod : Racer
{
    private bool blower = true || false;

    public HotRod();

    public HotRod(string name, int speed, Engine engine);


    public override bool IsDead()
    {
        Engine engine1 = new Engine();
        engine1 = Engine1;
        Random rnd = new Random();
        rnd.NextDouble();
        bool dead = false;

        if (racerSpeed > 50 && rnd.NextDouble() > 0.6)
            if (engine1.horsePower < 300 && blower == true)
                dead = false;
            else
                dead = true;

        else if (racerSpeed > 100 && rnd.NextDouble() > 0.4)

            if (engine1.horsePower >= 300 && blower == true)
                dead = true;
            else
                dead = false;
        else
            dead = false;

        return dead;
    }

    public override string ToString()
    {
        string output;

        output = "\n============ HotRod Information ============";
        output += "\n\t              Racer's Name:\t" + racerName;
        output += "\n\t               Car's Speed:\t" + carSpeed;
        output += "\n\t          Engine Cylinders:\t" + engineCylinders;
        output += "\n\t         Engine Horsepower:\t" + engineHorsePower;
        output += "n\t               Racer's Type:\t" + racerType;
        output += "n\t          Racer with Blower:\t" + carBlower;
        output += "n\t             Still Working?:\t" + IsDead;

        return output;
    }
}

次に、派生した StreetTuner クラスは

public class StreetTuner : Racer
{
    private bool nitrous;

    public StreetTuner();

    public StreetTuner(string name, int speed, Engine engine);

    public bool IsDead
    {
        get { return IsDead; }
        set
        {
            if (speed > 50 && rnd.NextDouble() > 0.6)
                if (horsePower < 300 && blower == true)
                    IsDead = false;
                else
                    IsDead = true;
            else if (speed > 100 && rnd.NextDouble() > 0.4)
                if (horsePower >= 300 && blower == true)
                    IsDead = true;
                else
                    IsDead = false;
        }
    }
}
4

2 に答える 2

0

派生クラスには、その基本クラスとの「is-a」関係があります。したがって、あなたの場合、 aHotRodは aRacerであり、 aStreetTunerは aRacerであるため、配列が type であると宣言すると、 a であるすべてのRacerものRacerをその配列に入れることができます。したがって、次のようになります。

var myarray = new Racer[2];
myarray[0] = new HotRod();
myarray[1] = new StreetTuner();

派生型は明示的にインスタンス化しますが、継承により、基本型が指定されている場所ならどこでも使用できます。これは、それらがその型 (の基本クラスRacer) であり、具象型 (HotRodまたはStreetTuner場合によっては) であるためです。

Racer次のように、コンストラクタを記述する必要があります。

// Default constructor
public Racer()
{

}

// Named value constructor
public Racer(string _name, int _speed, Engine _engine)
{
    // Store the name, speed and engine values
    racerName = _name; 
    racerSpeed = _speed; 
    engine = _engine;
}

コンストラクターについてHotRodStreetTuner同様です。

于 2013-08-27T03:49:10.690 に答える
0

元の回答

私はあなたが意味すると思います

    Racer[] myarray = new Racer[2];
    myarray[0] = new HotRod();
    myarray[1] = new StreetTuner();

更新された回答

実際のコードを見た後、メイン プログラムにはいくつかの作業が必要です。まず第一に、コードは Methods にある必要があり、直接 Classesにある必要もありませ。次に、クラスを変数のように使用しています。次のようなものが必要だと思います:

public class Program
{
    public static void Main()
    {
        ApplicationUtilities.DisplayApplicationInformation();
        ApplicationUtilities.DisplayDivider("Start Racer Program");
        ApplicationUtilities.DisplayDivider("Prompt for Racer information and create first Racer");

        Racer[] myarray = new Racer[2];
        myarray[0] = new HotRod();
        myarray[1] = new StreetTuner();

        CollectRacerInformation(myarray[0]);
    }

}
于 2013-08-27T03:43:40.393 に答える