problem z metodą usuwająca ostatni wyraz tablicy dynaminczej

0

Witam, muszę napisać metodę, która jeśli zmienna liczbaSamochodow jest większa od zmiennej pojemnosc to ma usuwac ostatnio dodany element z tablicy samochody. Napisałem coś takiego:

        public samochod wyprowadzSamochod()
        {
            if (liczbaSamochodow==0)
            {Console.WriteLine("Garaz jest pusty"); }
            else if (liczbaSamochodow > pojemnosc)
            {
                samochod[] samochody = new samochod[liczbaSamochodow - 1];
               
                liczbaSamochodow--;
                
            }
return samochod
}

Metoda musi zwracać samochod, jednak gdy zapisuję return samochod wyswietla się błąd " element samochody jest elementem typu typ i nie może być zwracany".
Czy mógł by mi ktoś podpowiedzieć jak to zrobić i czy dobrze zrobiłem usuwanie elementu? nic innego mi nie przyszło do głowy, a i znaleźć nie mogłem.

0

Co to za samochod zwracasz?

0

Zwracasz klasę zamiast obiekt.

public class samochod {}

Musisz zwrócić obiekt

samochod auto = new samochod();
return auto;

BTW
Za każdym razem tworzysz nową listę samochodów samochod samochody = new samochod[liczbaSamochodow - 1];. Nigdy nie usuwasz samochodu. Definiujesz tylko wielkość tablicy.

0

@lion137:
klasa samochod:

    class samochod
    {

        public samochod()
        {
            model = "nieznany";
            marka = "nieznana";
            iloscDrzwi = 0;
            pojemnoscSilnika = 0;
            srednieSpalanie = 0;
            iloscSamochodow++;
        }
        public samochod(string marka_, string model_, int iloscDrzwi_, int pojemnoscSilnika_, double srednieSpalanie_)
        {
            marka = marka_;
            model = model_;
            iloscDrzwi = iloscDrzwi_;
            pojemnoscSilnika = pojemnoscSilnika_;
            srednieSpalanie = srednieSpalanie_;
            iloscSamochodow++;

        }

        private double ObliczSpalanie(double dlugoscTrasy)
        {
            double spalanie;
            spalanie = srednieSpalanie * dlugoscTrasy / 100.0;

            return spalanie;
        }


        public double obliczKosztPrzejazdu(double dlugoscTrasy, double cenaPaliwa)
            {
            double kosztPrzejazdu;
                kosztPrzejazdu = ObliczSpalanie(dlugoscTrasy) * cenaPaliwa;
                return kosztPrzejazdu;
            }
        

        public void wypiszInfo()
        {
            Console.WriteLine("marka: " + marka + " model: " + model + " ilosc drzwi: " + iloscDrzwi + " pojemnosc silnika: " + pojemnoscSilnika +
                " srednie spalanie: " + srednieSpalanie);

        }

        public static void WypiszIloscSamochodow()
        {
            Console.WriteLine("ilosc samochodow: " + iloscSamochodow);
        }

        private string marka;
        private string model;
        private int iloscDrzwi;
        private int pojemnoscSilnika;
        private double srednieSpalanie;
        private static int iloscSamochodow = 0;

        public void wypisz()
        {
            Console.WriteLine(marka+" "+ model+" "+ iloscDrzwi+" "+ pojemnoscSilnika+" "+iloscSamochodow);
        }

        public string Marka
        {
            get { return marka; }
            set { marka = value; }
        }

        public string Model
        {
            get { return model; }
            set { model = value; }
        }

        public int IloscDrzwi
        {
            get { return iloscDrzwi; }
            set { iloscDrzwi = value; }
        }

        public int PojemnoscSilnika
        {
            get { return pojemnoscSilnika; }
            set { pojemnoscSilnika = value; }
        }

        public double SrednieSpalanie
        {
            get { return srednieSpalanie; }
            set { srednieSpalanie = value; }
        }
    }
}

klasa garaż:

    class garaz
    {
        public string adres;
        public int pojemnosc;
        private int liczbaSamochodow = 0;
        private samochod[] samochod;

        public garaz()
        {
            adres = "nieznany";
            pojemnosc = 0;
            samochod = null;
        }
        public garaz(string adres_, int pojemnosc_)
        {
            adres = adres_;
            pojemnosc = pojemnosc_;
            samochod[] samochody = new samochod[pojemnosc];
            liczbaSamochodow++;
        }
      
        public int Pojemnosc
        {
            get { return pojemnosc; }
            set
            {
                pojemnosc = value;
                samochod = new samochod[pojemnosc];
            }
        }
        public string Adres
        {
            get { return adres; }
            set { adres = value; }
        }
        public void WprowadzSamochod(samochod samochod)
        {
            
 
            if (liczbaSamochodow >= pojemnosc)
            { Console.WriteLine("Garaż jest pełny"); }
            else {
                samochod[] samochody = new samochod[pojemnosc];
                samochod model_ = new samochod();
                samochod marka_ = new samochod();
                samochod pojemnoscSilnika_ = new samochod();
                samochod srednieSpalanie_ = new samochod();
                samochod iloscDrzwi_ = new samochod();
                samochody[liczbaSamochodow] = model_;
                samochody[liczbaSamochodow] = marka_;
                samochody[liczbaSamochodow] = pojemnoscSilnika_;
                samochody[liczbaSamochodow] = srednieSpalanie_;
                samochody[liczbaSamochodow] = iloscDrzwi_;
                liczbaSamochodow++;
            }
            
        }
        public samochod wyprowadzSamochod()
        {
            if (liczbaSamochodow==0)
            {return Console.WriteLine("Garaz jest pusty"); }
            else if (liczbaSamochodow >= pojemnosc)
            {
                samochod[] samochody = new samochod[liczbaSamochodow - 1];
               
                liczbaSamochodow--;
                return samochod[liczbaSamochodow];
            }
        }
        public void wypiszInfo()
        {
            for (int i=0; i<liczbaSamochodow; i++)
            {
            }
        }
    }
}
0

Główne chorości w tym projekcie, jakie na szybko widzę:

  • klasy w C# piszemy z wielkiej litery. Źle to się czyta

  • klasa która jest sobą i zarazem pojemnikiem na siebie to zły pomysł. Tak jakbyś miał jabłko połączone z koszykiem na jabłka. Zbiór przedmiotów jest czymś odmiennym od jednego przedmiotu.

  • musisz się masakrowac jakimś bardzo chorym poradnikiem, jeśli przechowujesz w tablicy. Tak sie nigdy nie robi, to nie jest C. Tu się używa np List<Samochod>

  • metody w C# (odmiennie niż w Javie) pisze się z wielkiej litery

samochod model_ = new samochod();
samochod marka_ = new samochod();
samochod pojemnoscSilnika_ = new samochod();
samochod srednieSpalanie_ = new samochod();



Powiedz mi, co poeta miał na myśli (ewentualnie co jarał)
1

To jest to z czym zawsze walczę. Jeżeli nazwiesz poprawnie instancje klas i klasy od razu zauważysz co robisz źle. Podpowiedź:

class MojaKlasa
{
}
public MojaKlasa ZwrocMiInstacjeKlasy()
{
     MojaKlasa nowaInstancja = new MojaKlasa();
     return nowaInstancja;
}
0
{return Console.WriteLine("Garaz jest pusty"); }

to nie przejdzie, nie możesz zwrócić voida. Usuń ten return jeżeli chcesz to mieć w ten sposób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1