• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rekurencyjne wyświetlanie tablicy

Object Storage Arubacloud
0 głosów
922 wizyt
pytanie zadane 10 grudnia 2018 w C# przez Zuber Nowicjusz (230 p.)

Witam serdecznie, mianowicie mam zadanie stworzyć funkcję która zwraca jedynie nieparzyste liczby z tablicy, w postaci tekstowej wykorzystując rekurencję, w formacie bez spacji oraz znaku przejścia do nowej linii, zgodnie z kolejnością występowania, np.: [3,5,7,3]. Mój problem pojawia się odpowiednim formatowaniem tekstu, a dokładniej rzecz biorąc nie wiem jak usunąć przecinek w momencie gdy kilka pierwszych liczb jest parzysta.

To mój kod :)

static string ZwrocNieparzyste1(int[] tab, int i = 0)
        {
            if (i == tab.Length-1 & tab[i] % 2 != 0)
            {
                return "," + tab[i] +"]";
            }
            else if(i == tab.Length - 1)
            {
                return "]";
            }

            if (i == 0 & tab[i] % 2 != 0)
            {
               return "[" + tab[i] + ZwrocNieparzyste1(tab, i + 1);
            }
            else if(i == 0)
            {
                return "[" +ZwrocNieparzyste1(tab, i + 1);
            }

            if (tab[i] % 2 != 0 & i != tab.Length-1)
            {
                return   "," + tab[i] + ZwrocNieparzyste1(tab, i + 1);
            }
            else
            {
                return ZwrocNieparzyste1(tab, i + 1);
            }
        }

 

2 odpowiedzi

0 głosów
odpowiedź 11 grudnia 2018 przez Bondrusiek Maniak (61,370 p.)

Witam,

do końca nie rozumiem Twojego pytania. Masz rekurencyjnie wyświetlić liczby nieparzyste z tablicy czy stworzyć funkcję rekurencyjną która zwróci żądany napis. Wydaje mi się że lepiej w przypadku gdy napis się zmienia użyć klasy StringBuilder zamiast zwykłego stringa. Do końca nie wiem jak to jest w przypadku rekurencji. Ja zrobiłem to tak:

        static StringBuilder builder = new StringBuilder("[ ");
        static void Show(int[] tab, int left, int right)
        {
            
            if(left < right)
            {
                if(tab[left] % 2 == 1)
                {
                    builder.Append(tab[left].ToString() + ",");
                    //Console.WriteLine(tab[left].ToString() + ",");
                }
                Show(tab, left + 1, right);
            }
            else
            {
                builder[builder.Length - 1] = ']';
            }
            
        }

        public static void Main()
        {
            int[] tab = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            Show(tab, 0, 9);
            Console.WriteLine(builder);

            Console.ReadKey();
        }
    }

 

–2 głosów
odpowiedź 11 grudnia 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
Jezusie xD to co zrobiłeś, to jedynie utrudniłeś życie i nigdy nie powinieneś tak robić.

Powinieneś zwrócić tablicę a nie łańcuch znaków. Później tą zwróconą tablicę po prostu iterować w pętli i odpowiednio nadać formatowanie dla wartości.

Musisz ustawić po prostu sprawdzić czy to jest ostatni element w tablicy i po prostu w ostatniej iteracji nie dodawać tego przecinka.
komentarz 11 grudnia 2018 przez Zuber Nowicjusz (230 p.)
Sęk w tym, że ja jak najbardziej zdaje sobie sprawę, że dałoby się to lepiej zrobić, ale niestety zadanie wygląda tak jak wygląda i to właśnie z tym mam problem :)

Podobne pytania

+1 głos
2 odpowiedzi 143 wizyt
0 głosów
2 odpowiedzi 270 wizyt
0 głosów
1 odpowiedź 1,221 wizyt
pytanie zadane 11 listopada 2017 w C# przez ewa97 Nowicjusz (170 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...