[C#] Dodawanie elementów do stosu

0

Jak zdefiniować stos jako zmienną globalną, żeby przechowywać w niej wartości. No taka pierdoła, a nie działa. Jestem w tym zielony, bo zwykle programuję w Java, ale mam na zajęcia napisać program w C# i się gubię. Poniżej wrzucam kawałek kodu.

 
        static Stack stack;

        public RPN()
        {
            stack = new Stack();
            InitializeComponent();
        }

        public void addToStack(double d)
        {
            stack.Push(d);

            Stack temp = stack;

            if (temp.Count > 0) label5.Text = temp.Pop().ToString();
            if (temp.Count > 0) label6.Text = temp.Pop().ToString();
            if (temp.Count > 0) label7.Text = temp.Pop().ToString();
            if (temp.Count > 0) label8.Text = temp.Pop().ToString();

        }

Za każdym razem jak wciskam button "Enter" (button wywołuje metodę addToStack()) prawdopodobnie tworzy mi się nowy obiekt stosu i posiada tylko jedną wartość. A chcę, żeby pamiętał wcześniej wprowadzone wartości. Co robię nie tak ??

0

Zamień "temp" na "stack" i usuń linijkę "Stack temp = stack;"

0

Pewnie stos trzeba utworzyć tylko raz np przy uruchomieniu programu a później odkładać i zdejmować sprawdzając czy nie jest pusty. Powodzenia

0
Vexling napisał(a)

Jestem w tym zielony, bo zwykle programuję w Java, ale mam na zajęcia napisać program w C# i się gubię.

Te języki są tak podobne, że nie jest to żadne tłumaczenie...

0

@someking no właśnie miałbyś rację w 90% przypadków, natomiast ten przypadek jest inny i całkowicie usprawiedliwia moją niewiedzę ;) Przekonasz się o tym jak wyjaśnię problem.
@kubARek potrzebuję zmiennej temp, żeby prezentować widok na bieŻąco (Boże, widzisz takie błędy i nie grzmisz), a zmiennej stack żeby wykonywać na niej operacje matematyczne.

A problem był w tym, że w linijce "Stack temp = stack;" jest błąd, który w języku Java przeszedł by bez problemu a nawet NetBeans podpowiedziałby, żeby właśnie tak to zapisać. Ową linijkę trzeba zamienić na "Stack temp = new Stack(stack);" :) Jest tylko jeden problem, stos temp tworzy się ze stosu stack, ale ma odwrócone elementy. Może ma ktoś lepszy sposób na skopiowanie jednego stosu do drugiego w niezmienionej formie ??

0

czyli ty nawet w java nie umiesz programowac :)

masz juz zadeklarowany static Stack stack; (nie bede wnikal po co static i nie bede rugal, bo mi sie nie chce)
wiec w addToStack operujesz wlasnie na tym stosie, czyli stack.Push(d)
zeby wypisac elementy znajdujace sie na stosie mozesz uzyc enumeratora
foreach(double dd in stack) Console.WriteLine(dd);

poza tym lepiej uzyc Stack<T>

jesli chcesz aby w czasie dodawania i wypisywania stosu nic go nie zmienilo wez caly blok kodu umiecs w lock
tak samo uzyj lock (oczywiscie uzywajac tego samego obiektu) w metodach wykonujacych jakas operacje na elementach stosu

0

No akurat ten static jest najmniej istotny. Problem był gdzie indziej i został rozwiązany, więc fajnie, że pokazałeś swoją wyższość nad innymi. Ale nie będę rugał.
Nie wypisuję stosu w konsoli, tylko podstawiam 4 elementy z góry pod 4 obiekty typu Label. Potrzebuję dwóch stosów, ponieważ jak zdejmuję wartość z jednego stosu w celu jej wyświetlenia, to muszę ją jeszcze wykorzystać gdzie indziej do obliczeń. Uznałem, że najlepiej będzie skopiować jeden stos do drugiego i wyświetlać kopię. Mógłbym też używać wartości przechowywanych w label... No ale teraz nie będę przerabiał. Używam Stack<T>, tutaj tego nie wypisałem, bo ten kod powyżej jest kodem po różnych próbach i błędach, między innymi po wykasowaniu <T>.

0
Vexling napisał(a)

Potrzebuję dwóch stosów, ponieważ jak zdejmuję wartość z jednego stosu w celu jej wyświetlenia, to muszę ją jeszcze wykorzystać gdzie indziej do obliczeń. Uznałem, że najlepiej będzie skopiować jeden stos do drugiego i wyświetlać kopię. Mógłbym też używać wartości przechowywanych w label... No ale teraz nie będę przerabiał. Używam Stack<T>, tutaj tego nie wypisałem, bo ten kod powyżej jest kodem po różnych próbach i błędach, między innymi po wykasowaniu <T>.

To po jasną cholerę używasz w ogóle stosu?

0

Bo w efekcie końcowym to jest kalkulator RPN a stos się najlepiej nadaje do zrobienia czegoś takiego. Poza tym mam taki nakaz w treści zadania ;)

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