• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program ignoruje polecenie

0 głosów
45 wizyt
pytanie zadane 17 czerwca w C# przez Bartek12 Mądrala (5,380 p.)

Mam program:

private void find2(List<molecule> _substraty, List<molecule> _produkty)
        {
            int myID = funcID;
            funcID++;

            List<element> sub = utils.getStats(_substraty);
            List<element> pro = utils.getStats(_produkty);

            textBox1.Text = utils.getText(_substraty);
            textBox2.Text = utils.getText(_produkty);

            //if (sub.Count != pro.Count) return;
            string s = "";
            List<molecule> tab = new List<molecule>();
            int ID = 0;

            for (int i = 0; i < sub.Count; i++)
            {
                if(sub[i].count != pro[i].count)
                {
                    if(sub[i].count > pro[i].count)
                    {
                        tab = _produkty;
                        ID = 2;
                    }
                    else
                    {
                        tab = _substraty;
                        ID = 1;
                    }
                    s = sub[i].symbol;
                    break;
                }
            }

            if (s == "")
            {
                textBox1.Text = utils.getText(_substraty);
                textBox2.Text = utils.getText(_produkty);
                MessageBox.Show("Uzgodniono!");
            }
            MessageBox.Show($"my state: {utils.getText(_substraty)} -> {utils.getText(_produkty)}");

            List<molecule> subState = utils.getTab(_substraty);
            List<molecule> proState = utils.getTab(_produkty);
            List<molecule> tabState = utils.getTab(tab);

            for (int i = 0; i < tab.Count; i++)
            {
                try
                {
                    MessageBox.Show($"{myID} searching {s} in {tab[i].name} result {tab[i].findInElements(s).Item1 != null}");

                    if (tab[i].findInElements(s).Item1 == null)
                        utils.debug(tab.GetRange(i, 1));

                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
                

                if (tab[i].findInElements(s).Item1 != null)
                {
                    tab[i].count += 1;

                    if(ID == 1)
                    {
                        _substraty = tab;
                    }else if(ID == 2)
                    {
                        _produkty = tab;
                    }

                    if(tab[i].count < 3)
                    {
                        MessageBox.Show("Start " + funcID);
                        find2(_substraty, _produkty);
                    }
                    else
                    {
                        MessageBox.Show("TEST");
                        textBox1.Text = utils.getText(_substraty);
                        textBox2.Text = utils.getText(_produkty);
                    }
                    MessageBox.Show("data for: " + myID);
                    //MessageBox.Show($"my first state: {utils.getText(subState)} -> {utils.getText(proState)}");
                    MessageBox.Show($"my state: {utils.getText(_substraty)} -> {utils.getText(_produkty)}");
                    _substraty = subState;
                    _produkty = proState;
                    tab = tabState;
                    MessageBox.Show($"retrun to: {utils.getText(_substraty)} -> {utils.getText(_produkty)}");
                    MessageBox.Show($"tab: {utils.getText(tab)}");
                }
            }

            MessageBox.Show("end " + myID);

        }

cały problem jest w drugiej pętli mianowicie:

try
                {
                    MessageBox.Show($"{myID} searching {s} in {tab[i].name} result {tab[i].findInElements(s).Item1 != null}");

                    if (tab[i].findInElements(s).Item1 == null)
                        utils.debug(tab.GetRange(i, 1));

                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }

Program wyświetla message boxa "1 searching H in KOH result False" i od razu przeskakuje na sam koniec do wiadomości "end 1" ignorując całkowicie utils.debug(). Nie wyświetla przy tym żadnego błędu.

Tak samo kiedy dam utils.debug na początek pętli i tak zostaje zignorowany nie wyświetlając żadnej wiadomości.

public static void debug(List<molecule> tab)
        {
            for (int i = 0; i < tab.Count; i++)
            {
                for (int y = 0; y < tab[i].elements.Count; y++)
                {
                    element el = tab[i].elements[y];
                    MessageBox.Show($"{el.symbol} - {el.count}");
                }
            }
        }

Ma ktoś pomysł jak to naprawić lub co jest nie tak?

1 odpowiedź

0 głosów
odpowiedź 17 czerwca przez Wiciorny Mędrzec (154,820 p.)
tab[i].findInElements(s)

co zwraca tab[i] ? może właśnie to jest null? albo nie znajduje metoda elementu s ? 
leci wtedy Exception? Wtedy if się nie wykonuje a np to ? 

catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }

 

komentarz 17 czerwca przez Bartek12 Mądrala (5,380 p.)

tab[i] zwraca obiekt molecule, który nie jest równy null. Świadczy o tym:

MessageBox.Show($"{myID} searching {s} in {tab[i].name} result {tab[i].findInElements(s).Item1 != null}");

gdzie tab[i].name zwraca mi KOH, w przypadku o który mi chodziło. Exception nie może się wykonywać ponieważ nie ma żadnej wiadomości.

komentarz 18 czerwca przez Wiciorny Mędrzec (154,820 p.)
no dobra, nie jest null a jesli jest empty albo undefined? :) to jest != null ...

bo obiekt melecule moze istniec ale po nim wywołujesz zdarzenie - zachowanie moze dzialac ale Item1 czym jest na rezultacie zdarzenia? :) Za mało treści zbyt wiele zmiennych zeby powiedziec skoro warunek nie dziala znaczy ze cos jest nie tak :)

może zwracany jest null który w wyrażeniu tutaj jest stringiem natomiast w if, jest juz inaczej traktowany

A debugowałeś utils.debug ? czy w ogóle trafia do tego ifa twój program? Czym jest w ogóle obiekt utils, i funkcja debug?

Podobne pytania

0 głosów
2 odpowiedzi 126 wizyt
pytanie zadane 3 marca 2018 w C i C++ przez Kuelo Początkujący (410 p.)
0 głosów
1 odpowiedź 85 wizyt
pytanie zadane 21 kwietnia 2017 w C# przez karmider013 Początkujący (340 p.)
0 głosów
1 odpowiedź 214 wizyt
pytanie zadane 2 marca 2017 w C i C++ przez Tomasz Indyk Nowicjusz (160 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

84,091 zapytań

132,861 odpowiedzi

293,830 komentarzy

55,529 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...