Liczby z textboxa do tablicy

0

Witam,
Mam problem ponieważ tworzę program i chciałbym żeby z TextBoxa liczby połączyć z tablicą te liczby są odzielone przecinkiem a na końcu chciałbym wyświetlić tablice np 2 w TextBox.
Pracuję na visual studio 2012 w c#.

 
private void OperatorMedClick(object sender, EventArgs e)
        {
            int s = 0;
            int medianaN = (wynik.Text).Length;
            String[] mediana = new String[medianaN];
            for (int z = 0; z <= medianaN; z++)
            {
                if (wynik.Text[z] != ',')
                {
                    mediana[s] = mediana[s] + wynik.Text[z];
                }
                else
                {
                    s++;
                    z++;
                }
            }
            
            wynik.Text = mediana[0];
1
 List<int> numbers = wynik.Text.Split(',').Select(int.Parse).ToList(); 

I masz listę elementów, dalej mam nadzieję sobie poradzisz :) ( Nie testowane bo nie mam tu visual studio, ale na pewno coś w ten deseń)
Próbujesz zrobić to sposobem znanym z C, nie po to MS stworzył tyle funkcji, żeby teraz z nich nie korzystać :)

0

Nie wiem co tam liczysz, bo to raczej nie jest mediana.

	var sortedTab = wynik.Text.Split(',').Select(int.Parse).OrderBy(i => i).ToList();
	var index = sortedTab.Count / 2;
	var median = sortedTab.Count > 0 ? ((sortedTab.Count & 1) == 1 ?  (sortedTab[index] + sortedTab[index-1]) / 2 : sortedTab[index]) : 0;
	wynik.Text = median.ToString();

A tak przy okazji: to się w ogóle kompiluje?

for (int z = 0; z <= medianaN; z++)
{
    ...
    z++;
    ...
}
0

sobie to troche inaczej zrobiłem . Tak to jest mediana zrobiłem taki kod :

 
 private void OperatorMedClick(object sender, EventArgs e)
        {
            int medianaN = (wynik.Text).Length;
            int i=1;
            string s = wynik.Text;
            string[] words = s.Split(',');
            string[] mediana = new string[medianaN];
            foreach (string word in words)
            {
                mediana[i] = word;
                i++;
            }
            Array.Sort(mediana);
            if ((i % 2) == 0)
            {
                Double c = Double.Parse(mediana[(i / 2) - 1]);
                Double v = Double.Parse(mediana[(i / 2)]);
                 parzysta = (c + v) / 2;
            }
            
            wynik.Text = (parzysta).ToString();

        }
    }

No i zawsze wychodzi mi 0

0

medianaN = words.Length. Co jeśli i % 2 == 1? Dlaczego używasz property obiektu jako zmiennej lokalnej (parzysta)?

0

kurcze mam jeszcze jeden problem ponieważ zrobiłem sobie do tej mediany sortowanie bąbelkowe :

int v=0, j=0;
            String temp;
            for (i = 0; v < medianaN - 1; v++)
            {
                for (j = 0; j < medianaN - 1 - v; j++)
                {
                    
                   if ( Double.Parse(mediana[j]) > Double.Parse(mediana[j + 1]))
                    {
                        temp = mediana[j + 1];
                        mediana[j + 1] = mediana[j];
                        mediana[j] = temp;
                    }
                }
            } 
 

Kod mi cały kompiluje ale później wywala mi błąd przy instrukcji warunkowej :
"Value cannot be null."

tylko że tablica nie jest pusta

0

Podaje cały kod , bo nie wiem gdzie jest błąd :

private void OperatorMedClick(object sender, EventArgs e)
        {
            int medianaN = (wynik.Text).Length;
            int i=0;
            string s = wynik.Text;
            string[] words = s.Split(',');
            string[] mediana = new string[medianaN];
            foreach (string word in words)
            {
                mediana[i] = word;
                i++;
            }
           
            int v=0, j=0;
            String temp;
            for (i = 0; v < medianaN - 1; v++)
            {
                for (j = 0; j < medianaN - 1 - v; j++)
                {
                    
                   if ( Double.Parse(mediana[j]) > Double.Parse(mediana[j + 1]))
                    {
                        temp = mediana[j + 1];
                        mediana[j + 1] = mediana[j];
                        mediana[j] = temp;
                    }
                }
            } 



            if ((i % 2) == 0)
            {
                int a = (i / 2) - 1;
                int d = (i / 2);
                Double c = Double.Parse(mediana[a]);
                Double k = Double.Parse(mediana[d]);
                x = (c + k) / 2;
            }
            else
            {
                int a = (i / 2) ;
                Double c = Double.Parse(mediana[a]);
                x = c;
            }
            
            wynik.Text = (x).ToString();

dodanie znacznika <code class="c"> - furious programming

0

Tu jest masa błędów.

Co masz wpisane w wynik.Text gdy uruchamiasz tę funkcję? I co w ogóle chcesz osiągnąć?

0

to tak w wynik.text mam liczby podane z klawiatury np 3,4,5,6,7 odzielone przecinkami i z tego muszę zrobić medianę tylko wszystko fajnie działało dopóki nie musiałem całej tablicy sortować nie chce mi jej posortować ponieważ wywala błąd. próbowałem także funkcją system.array.sort ale to jest dokładnie to samo .

1

Tak to jest, jak się używa dziwnych zmiennych z kosmosu zamiast właściwości Length tablicy.

Dla Twojego przykładu wartość medianaN wynosi 7. Liczb jest 4, więc po skopiowaniu z words (co jest kompletnie bez sensu, bo po co kopiować z tablicy string do string, na dodatek w pętli foreach), w tablicy mediana są ustawione elementy pod indeksami 0, 1, 2 oraz 3. Dalej masz pętlę, która idzie po tablicy mediana po elementach o indeksach od 0 do 6 i próbujesz je parsować, tymczasem elementy 4, 5 i 6 są po prostu nullami.

W pętli, zamiast medianaN (która jest w ogóle niepotrzebna) używaj mediana.Length.

0

Dzięki za pomoc twój post dał mi dużo do myślenia i zrobiłem to na listach , żeby było dynamicznie
Dzięki :)

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