Błąd zerowej wartości

0

Witam,
Posiadam dwa pliki tekstowe. W pierwszym pliku są znaki ("a" i "e") zapisane w oddzielnych liniach. W drugim pliku mam dwa zdania, również w oddzielnych liniach. Metoda ma za zadanie sprawdzić czy wyraz z danego zdania ma w sobie któryś ze znaków - jeśli tak to "usunąć" ten wyraz, a potem nowe zdania zapisać w nowym pliku.
Problem pojawia się w miejscu pogrubionym niżej. Występuje on dokładnie po wykonaniu się normalnie dla literki "a" i przejściu do literki "e", wyświetla się komunikat "Wartość nie może być zerowa". Nie widzę niestety czemu tak się dzieje. Z góry dziękuje za pomoc.

zmienna p1 jest to przeczytany pierwszy z plików, i skorygowany do ciągu znaków w jednej linii = ae

   static void czyzawieraznak(string plik, string plik2, string plik3)
         {
             StreamReader sr = new StreamReader(plik);
             StreamReader sr2 = new StreamReader(plik2);
             StreamWriter sw = new StreamWriter(plik3);

            string p1 = sr.ReadToEnd();
            p1 = usunpuste(p1);

             while (!sr2.EndOfStream)
             {
                 string[] p2 = sr2.ReadLine().Split(' ');
                 for (int i = 0; i < p1.Length; i++)
                 {
                     for (int j = 0; j < p2.Length; j++)
                     {
                         **if (p2[j].Contains(p1[i]))**
                         {
                             p2[j] = null;
                         }
                     }
                 }
                 sw.Close();
                 zapisz2(plik3, p2);
             }
         }

0

Sprawdź najpierw to spróbuj użyć nowo nabytej wiedzy w celu rozwiązania problemu, jak się nie uda to dopiero tu wróć.

0
                 for (int i = 0; i < p1.Length; i++)
                 {
                     for (int j = 0; j < p2.Length; j++)
                     {
                         if (p2[j].Contains(p1[i]))
                         {
                             p2[j] = null;
                         }
                     }
                 }

Pierwsza iteracja pętli i, załóżmy, że p2 ma jeden element i zostaje on nullem, bo spełniony będzie warunek if (p2[j].Contains(p1[i])). Druga iteracja pętli i - zgadnij co zwróci p2[j].Contains(p1[i]) dla j = 0 i i = 1?
Na przyszłość:

  • uważnie analizuj swój kod
  • naucz się podstaw obsługi debugera (np. Debugowanie)
  • poświęć chwilę na wymyślenie dobrych nazw zmiennych, zastanów się, co za miesiąc powie Ci nazwa p1 czy p2. Wymyślanie dobrych nazw to lwia część czasu pracy programisty.

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