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

Odpowiedz Nowy wątek
2011-08-14 21:21
maroo123321
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

"Prosiłbym o nie zmienianie kodu źródłowego"..."eewenualne poprawienie lnijki z błędem".... Ehe... - Patryk27 2011-08-14 21:32

Pozostało 580 znaków

2011-08-14 22:00
msm
0

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.

Pozostało 580 znaków

2011-08-14 22:05
maroo123321
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.

Pozostało 580 znaków

2011-08-14 22:12
newC#
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();

Pozostało 580 znaków

2011-08-14 22:34
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ć. :)


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-08-14 22:38
newC#
0

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

Pozostało 580 znaków

2011-08-14 23:01
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.

Pozostało 580 znaków

2011-08-14 23:37
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.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-08-14 23:42
msm
0

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ę.

edytowany 2x, ostatnio: msm, 2011-08-14 23:49
Tak to jest jak ktoś programuje, nie znając podstawowych pętelek, warunków etc. - Madm4n 2011-08-14 23:52
Dlatego całe szczęście, że to while jest tak naprawdę do-while. - somekind 2011-08-15 00:41

Pozostało 580 znaków

2011-08-14 23:51
maroo123321
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

Pozostało 580 znaków

2011-08-15 00:40
0
maroo123321 napisał(a)

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

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


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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