Untitled

 avatar
unknown
plain_text
2 years ago
5.0 kB
6
Indexable
using System;
using System.Collections;

namespace zadanie04_szuplewska
{
    /* Napisz implementację listy typu array list (lista tablic) w wybranym przez siebie obiektowym języku programowania. 
       Implementacja ma być rekurencyjna z maksymalną hermetyzacją. */
    public class ArrayListRek
    {
        private ArrayList arrayList;
        public ArrayListRek()
        {
            arrayList = new ArrayList();
        }
        public void Dodawanie(object item)
        {
            DodawanieRek(arrayList, item);
        }
        public object Get(int indeks)
        {
            return GetRek(arrayList, indeks);
        }
        public void Set(int indeks, object wartosc)
        {
            SetRek(arrayList, indeks, wartosc);
        }
        public void Usuwanie(int indeks)
        {
            UsuwanieRek(arrayList, indeks);
        }
        public int LicznikRek()
        {
            return LicznikRek(arrayList);
        }
        public void Miejsca()
        {
            Miejsca_Rek(arrayList);
        }
        private int LicznikRek(ArrayList list)
        {
            int licznik = 0;
            foreach (var item in list)
            {
                if (item is ArrayList)
                {
                    licznik += LicznikRek((ArrayList)item);
                }
                else
                {
                    licznik++;
                }
            }
            return licznik;
        }
        private void DodawanieRek(ArrayList list, object item)
        {
            if (LicznikRek(list) > 0 && list[list.Count - 1] is ArrayList)
            {
                DodawanieRek((ArrayList)list[list.Count - 1], item);
            }
            else
            {
                list.Add(item);
            }
        }
        private object GetRek(ArrayList list, int indeks2)
        {
            foreach (var item in list)
            {
                if (item is ArrayList)
                {
                    var wynik = GetRek((ArrayList)item, indeks2);
                    if (wynik != null)
                    {
                        return wynik;
                    }
                }
                else
                {
                    if (indeks2 == 0)
                    {
                        return item;
                    }
                    indeks2--;
                }
            }
            return null;
        }
        private void SetRek(ArrayList list, int indeks2, object wartosc)
        {
            for (int i = 0; i < list.Count; i++)
            {
                var item = list[i];
                if (item is ArrayList)
                {
                    SetRek((ArrayList)item, indeks2, wartosc);
                }
                else
                {
                    if (indeks2 == 0)
                    {
                        list[i] = wartosc;
                        return;
                    }
                    indeks2--;
                }
            }
        }
        private void UsuwanieRek(ArrayList list, int indeks2)
        {
            for (int i = 0; i < list.Count; i++)
            {
                var item = list[i];
                if (item is ArrayList)
                {
                    UsuwanieRek((ArrayList)item, indeks2);
                }
                else
                {
                    if (indeks2 == 0)
                    {
                        list.RemoveAt(i);
                        return;
                    }
                    indeks2--;
                }
            }
        }
        private void Miejsca_Rek(ArrayList list)
        {
            for (int i = 0; i < list.Count; i++)
            {
                var item = list[i];
                if (item is ArrayList)
                {
                    Miejsca_Rek((ArrayList)item);
                }
                else
                {
                    Console.WriteLine($"Indeks {i}: {item}");
                }
            }
        }
    }
    class Program
    {
        static void Main()
        {
            ArrayListRek arrayListRek = new ArrayListRek();

            //dodawanie elementów
            arrayListRek.Dodawanie(87);
            arrayListRek.Dodawanie("Hello");
            arrayListRek.Dodawanie(2.96);
            //wyświetlanie zawartości
            Console.WriteLine($"Licznik: {arrayListRek.LicznikRek()}");
            arrayListRek.Miejsca();
            //zmiana wartości
            arrayListRek.Set(1, "World");
            //usuwanie elementu
            arrayListRek.Usuwanie(0);
            //wyświetlanie zmienionej zawartości
            Console.WriteLine("\nPo zmianach:");
            Console.WriteLine($"Licznik: {arrayListRek.LicznikRek()}");
            arrayListRek.Miejsca();
            
            Console.ReadKey();
        }
    }
}
Editor is loading...
Leave a Comment