Problem z tworzeniem tablicy w c#


(Triti) #1

Cześć mam problem z zadaniem. Mam ciąg kodów oddzielonych ‘#’, chcę wybrać tylko te które zaczynają się od 01 i od 03 i wyświetlenie ich. Napisałam coś takiego ale nie wyświetla :frowning:

string [] tab1 = [STRONA1].Split(’#’);
string [] tab2;
string KOD_PKD = null;
tab2= new string[99];

                for(int i = 0; i < tab1.Length; i++)
                {
                if(tab1[i].Substring(0,2) == "01"|| tab1[i].Substring(0,2) == "03")
                       {
                       tab2[i] = tab1[i];
                       }
                }
               
                for(int i = 0; i < tab2.Length; i++)
                       {
                       Console.WriteLine(KOD_PKD);
                       }
        
                 this= KOD_PKD;

(Fizyda) #2

Przyjrzyj się dokładnie tej linijce :wink:

PS. W tym kodzie może będziesz miał jeszcze jeden problem, zależnie od tego jakiego efektu oczekujesz, ale na razie zajmij się naprawieniem wyświetlania.


(Triti) #3

poprawiła w taki sposób ale dalej nie działa :confused:

                string [] tab1 = [STRONA1].Split('#');
                string [] tab2 = new string[1];
                string KOD = null;

                for(int i = 0; i < tab1.Length; i++)
                {
                if(tab1[i].Substring(0,2) == "01"|| tab1[i].Substring(0,2) == "03")
                       {
                       tab2[i] = tab1[i];
                       }
                }
               
                for(int i = 0; i < tab2.Length; i++)
                       {
                       this= KOD + tab2;
                       }
                      
                this= this;

(Fizyda) #4

To nadal nie jest poprawne, co w ogóle chcesz uzyskać w tych linijkach:

this= KOD + tab2;

this= this;

Bo to jest w ogóle bezsensu - nielogiczne. Wcześniej miałaś

Console.WriteLine(KOD_PKD);

I było to dużo bliższe poprawnemu rozwiązaniu niż to co masz teraz. Wcześniej wyświetlałaś to co było przechowywane w zmiennej KOD_PKD - czyli null (nic) bo nigdzie nie ustawiałaś wartości tej zmiennej, wystarczyło tylko zmienić KOD_PKD na konkretny element tablicy w której masz zapisane interesujące Cię kody.


(Triti) #5

Czy w dobrym kierunku idę?

string [] tab1 = [KODY(INPUT)].Split(’#’);
string [] tab2 = new string [9];
string KOD_PKD = null;
for(int i = 0; i < tab1.Length; i++)
{
if(tab1[i].Substring(0,2) == “01”|| tab1[i].Substring(0,2) == “03”)
{
tab2[i] += tab1[i];
}
}

                for(int i = 0; i < tab2.Length; i++)
                       {
                      
                       string wynik0 = KOD_PKD + tab2;
                       this=wynik0;
                       Console.WriteLine(this);
                        }

(Fizyda) #6

Ta pętla jest niepoprawna z tego względu że nie możesz mieć jednego indeksu dla tab1 i tab2 ponieważ mają one różne długości i zgaduję że w tab2 chcesz mieć wszystkie elementy po kolei a nie na tych samych indeksach co domyślnie. Gdybyś chciała przepisać z tab1 do tab2 interesujące Cię kody i by były na tych samych indeksach w tedy stwórz tablicę tab2 o długości tablicy tab1.
Ogólnie powinnaś tak zrobić z tego względu że może się okazać iż w tab1 będą same interesujące Cię kody i nie zapiszesz ich do mniejszej tablicy tab2.

Czemu przypisujesz do this wartość? This to wskaźnik na konkretny obiekt danej klasy, nie możesz czegoś takiego robić.
Tak samo nielogiczna jest linijka: string wynik0 = KOD_PKD + tab2; przypisujesz do wyniku null + tablica (nie element tylko tablica).

Ogólnie kod powinien wyglądać mniej więcej tak (mogą być błędy nie piszę na co dzień w C#)

string [] tab1 = [KODY(INPUT)].Split('#');
string [] tab2 = new string [tab1.Length];

int j = 0;

for(int i = 0; i < tab1.Length && j < tab2.Length; i++)
{
	if(tab1[i].Substring(0,2) == "01"|| tab1[i].Substring(0,2) == "03")
	{
		tab2[j] = tab1[i];
		j++;
	}
}

for(int i = 0; i < j; i++)
{
	Console.WriteLine(tab2[i]);
}