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

Program ignoruje polecenie

Object Storage Arubacloud
0 głosów
277 wizyt
pytanie zadane 17 czerwca 2021 w C# przez Bartek12 Mądrala (5,510 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 2021 przez Wiciorny Ekspert (269,710 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 2021 przez Bartek12 Mądrala (5,510 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 2021 przez Wiciorny Ekspert (269,710 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 213 wizyt
pytanie zadane 3 marca 2018 w C i C++ przez Kuelo Początkujący (410 p.)
0 głosów
1 odpowiedź 140 wizyt
pytanie zadane 21 kwietnia 2017 w C# przez karmider013 Początkujący (340 p.)
0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 2 marca 2017 w C i C++ przez Tomasz Indyk Nowicjusz (160 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...