Index was outside the bounds of the array.//Tablica problem//for

0

Witam.Korzystam z jednego podstawowego kursiku do C# i mam tablie w której mam kilka słów.Program w pierszym obiegu działa dobrze a następnei pokazuje mi komunikat jak w temacie dokładnie w linijce : char litera = Console.ReadLine()[0];

Cały program wygląda tak:

 string[] tabela1 = new String[4];
            tabela1[0] = "marek";
            tabela1[1] = "chris";
            tabela1[2] = "seamus";
            tabela1[3] = "andrzej";

            int nr=0;

            for (int g = 0; g < tabela1.Length-1; g++)
            {
               


                string wyraz = tabela1[g];
                int dlugosc = wyraz.Length;
                StringBuilder a = new StringBuilder();
                for (int b = 0; b < dlugosc; b++) a = a.Append('*');
                int ig;
                do
                {
                    
                    Console.WriteLine(a);
                    Console.WriteLine("podaj literę");
                     
                    char litera = Console.ReadLine()[0];
                    ig = 0;
                    for (int i = 0; i < dlugosc; i++)
                    {
                        if (litera == wyraz[i]) a[i] = litera;
                        if (a[i] == '*') ig++;
                    }
                }
                
                while (ig > 0);
                nr++;
                Console.WriteLine("brawo gadles wyraz nr."+nr);
                Console.Read();
                Console.Clear();

Prosiłbym o nie zmienianie kodu źródłowego a raczej pokazanie mi gdzie tkwi błąd ,dlaczegi i eewenualne poprawienie lnijki z błędem.
Z góry dziękuję
Pozdrawiam

1

Ja bym proponował zmienić

char litera = Console.ReadLine()[0];

na

char litera = Console.ReadKey().KeyChar;

Nie dość że czytelniejsze to wygodniejsze. No i nie ma błędu.

PS. Prosiłbym o nie zmienianie kodu źródłowego (...) ewenualne poprawienie lnijki z błędem - tego nie zrozumiałem.

0

Na pewnym forum pewna osoba ma skłonność pisania programu od poczatku,po swojemu w którym nigdy nie wiem co się dzieje więc o to mi chodzi ;)
A co do tematu to może wie Pan dlaczego nie działa poprzednia wersja?
pozdr.

0

Przyczyna prawdopodobnie tkwi w poniższym fragmencie:

Console.WriteLine("brawo gadles wyraz nr."+nr);
Console.Read();
Console.Clear(); 

Zakomentuj środkową linijkę tzn. Console.Read();

1

Dziwne podejście - nieczytelny zapis pętli i warunków w celu "zaoszczędzenia" na liczbie linii kodu, a w zamian za to rozwlekła definicja tablicy.

Zamiast:

 string[] tabela1 = new String[4];
            tabela1[0] = "marek";
            tabela1[1] = "chris";
            tabela1[2] = "seamus";
            tabela1[3] = "andrzej";

Wystarczy:

string[] tabela1 = { "marek", "chris", "seamus", "andrzej" }; 

To jest bez sensu:

a = a.Append('*');

Przypisanie jest niepotrzebne, wystarczy:

a.Append('*');

A największą zagadką jest to:

while (ig > 0);

To chyba nie tak miało być. :)

0

No właśnie... "przedmówca" nie jest leniem takim jak ja i słusznie zauważa "dziwne podejście" maroo123321... :)

0

proszę baaaaaaaaaaaardzo dokładnie zastanowić się na tym a potem pisać co jest zagadka a co nie

   Console.WriteLine(a);
                    Console.WriteLine("podaj literę");
 
                    char litera = Console.ReadLine()[0];
                    ig = 0;
                    for (int i = 0; i < dlugosc; i++)
                    {
                        if (litera == wyraz[i]) a[i] = litera;
                        if (a[i] == '*') ig++;
                    }
                }
 
                while (ig > 0); 

a w szeczególności nad if (a[i] == '*') ig++; i while (ig > 0);

A poza tym z resztą się zgadzam.

0
maroo123321 napisał(a)

proszę baaaaaaaaaaaardzo dokładnie zastanowić się na tym a potem pisać co jest zagadka a co nie

Faktycznie, to nie jest zagadka. To po prostu TRAGEDIA. Tak się nie formatuje kodu, bo przez to jest nieczytelny.
Moja rada - używaj snippetów i nie kombinuj sam.

1

Wybaczcie że się wtrącę, ale ten kod:

while (ig > 0);

Może zadziałać tylko na dwa sposoby:
jeśli ig <= 0, nie zrobi nic.
Jeśli ig > 0, wpadnie w nigdy niekończącą się pętlę.

0
somekind napisał(a)
maroo123321 napisał(a)

proszę baaaaaaaaaaaardzo dokładnie zastanowić się na tym a potem pisać co jest zagadka a co nie

Faktycznie, to nie jest zagadka. To po prostu TRAGEDIA. Tak się nie formatuje kodu, bo przez to jest nieczytelny.
Moja rada - używaj snippetów i nie kombinuj sam.

http://ivlo.neostrada.pl/cs_lekcje/5.htm

0
maroo123321 napisał(a)

http://ivlo.neostrada.pl/cs_lekcje/5.htm

Tutaj nie ma pustej linii między } a while.

0

Tak wiele to zmienia?

0

No jak widzisz ja się nabrałem na tę pułapkę - zmyliła mnie właśnie ta pusta linia, która oddzielała while od ciała pętli i sprawiała wrażenie, że jest to porzucona pętla. Nie robi się takich kwiatków, bo potem ktoś, kto czyta kod musi się domyślać więcej niż powinien.
Z pracy by Cię raczej nikt za to nie wyrzucił, ale jakiś mały opieprz i przestrogę byś dostał. No i koledzy mieliby ubaw.

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