Skip to content

Latest commit

 

History

History
198 lines (157 loc) · 5.85 KB

10.md

File metadata and controls

198 lines (157 loc) · 5.85 KB

Pergunta

10 - Cria uma classe chamada Car com três variáveis de instância, speed (float), weight (float) e fuelType (enumeração Fuel com 4 valores possíveis: Gasoline, Diesel, LPG e Electric). A classe deve ter ainda uma variável de classe (estática) chamada maxSpeed (float), com valor por omissão igual a 220.0f. A classe deve ter um único construtor que aceita argumentos para inicializar as variáveis weight e fuelType, inicializando a variável speed a zero. A classe deve ter os seguintes métodos:

  • Accelerate(float x) - Aumenta a velocidade com o valor indicado na variável x, mas nunca acima de maxSpeed. Devolve a nova velocidade.
  • Break(float x) - Diminui a velocidade com o valor indicado na variável x, mas nunca abaixo de zero. Devolve a nova velocidade.
  • GetSpeed() - Retorna o valor atual da velocidade sem a alterar.
  • GetFuelType() - Retorna o tipo de combustível.
  • GetWeight() - Retorna o peso do carro.
  • GetMaxSpeed() e SetMaxSpeed() - Métodos estáticos para obter e definir o valor da variável de classe maxSpeed.

Cria ainda uma classe chamada TestCar contendo um método estático Main() para testar exaustivamente todos os métodos da classe Car.

Soluções

Solução 1

namespace TestCar
{
    // Fuel enum
    enum Fuel
    {
        // Types of fuel
        Gasoline,
        Diesel,
        LPG,
        Electric
    }
}
namespace TestCar
{
    class Car
    {
        // Instance Variables
        private float weight;
        private float speed;
        private Fuel fueltype;

        // Static variables
        private static float maxSpeed = 220.0f;

        // Car constructor
        public Car(float weight, Fuel fueltype)
        {
            // Initiating speed as 0
            speed = 0;

            // Assigning variable's values
            this.weight = weight;

            // Gets fuel from Fuel enum
            this.fueltype = fueltype;
        }

        // METHODS

        // Add speed -- returns new speed value
        public float Accelerate(float x)
        {
            // Adds x to speed
            speed += x;

            // Case entered speed passes maxSpeed
            if (speed >= maxSpeed) { speed = maxSpeed; };

            return speed;

        }

        // Subtract speed -- returns new speed value
        public float Break(float x)
        {
            // Subtracts x from speed
            speed -= x;

            // Case entered speed is less tan 0
            if (speed <= 0) { speed = 0; };

            return speed;
        }

        // Sets maxSpeed
        public static void SetMaxSpeed(float x) => maxSpeed = x;

        // Returns speed value
        public float GetSpeed() => speed;

        // Returns fuel type
        public Fuel GetFuelType() => fueltype;

        // Returns weight of car
        public float GetWeight() => weight;

        // Returns maxSpeed
        public static float GetMaxSpeed() => maxSpeed;
    }
}
using System;
namespace TestCar
{
    class TestCar
    {
        static void Main(string[] args)
        {
            // Creating test cars
            Car fiatPunto = new Car(1000.5f, Fuel.Gasoline);
            Car tesla = new Car(600.23f, Fuel.Electric);
            Car van = new Car(2000.9f, Fuel.LPG);

            // Start testing methods!

            // Fiat punto's values as instatiated
            Console.WriteLine
                ($"Fiat Punto's fuel: {fiatPunto.GetFuelType()}");
            Console.WriteLine
                ($"Fiat Punto's weight: {fiatPunto.GetWeight()}\n");

            // Tesla's values as instantiated
            Console.WriteLine
                ($"Tesla's fuel: {tesla.GetFuelType()}");
            Console.WriteLine
                ($"Tesla's weight: {tesla.GetWeight()}\n");

            // Van's values as instantiated
            Console.WriteLine
                ($"Van's fuel: {van.GetFuelType()}");
            Console.WriteLine
                ($"Van's weight: {van.GetWeight()}\n");

            // Base Max Speed
            Console.WriteLine
                ($"All cars' Max Speed is: {Car.GetMaxSpeed()}");

            // The "race" starts here
            Console.WriteLine("THE RACE STARTS!\n");

            // Giving more than maxSpeed to fiatPunto -- to see what happens
            Console.WriteLine("Fiat Punto accelerates...");
            Console.WriteLine
                ($"Fiat Punto's speed: {fiatPunto.Accelerate(250.0f)}");

            // Breaking with fiatpunto
            Console.WriteLine("Fiat Punto breaks...");
            Console.WriteLine
                ($"Fiat Punto's decreased speed: {fiatPunto.Break(130.0f)}\n");

            // Setting a new maxSpeed for all cars
            Car.SetMaxSpeed(400.0f);
            Console.WriteLine($"Max Speed is now: {Car.GetMaxSpeed()}\n");

            // Giving acceleration to tesla
            Console.WriteLine("Tesla accelerates...");
            Console.WriteLine
                ($"Tesla's speed: {tesla.Accelerate(399.9f)}\n");

            // Breaking with fiatPunto to less than minimum speed
            Console.WriteLine("Fiat Punto stops");
            Console.WriteLine
                ($"Fiat Punto's decreased speed: {fiatPunto.Break(92.0f)}\n");

            // Accelerating van
            Console.WriteLine("Van accelerates...");
            Console.WriteLine
                ($"Van's speed: {van.Accelerate(100.5f)}\n");

            // Giving stoping to tesla
            Console.WriteLine("Tesla breaks and stops");
            Console.WriteLine
                ($"Tesla's speed: {tesla.Break(399.9f)}\n");

            // Accelerating van
            Console.WriteLine("Van reverses until it stops...");
            Console.WriteLine
                ($"Van's speed: {van.Accelerate(-100.5f)}\n");

        }
    }
}

Por João Rebelo