Czemu cały czas wyskakuje mi wyjątek, że stos jest pusty?

2016-01-20 23:43

Rejestracja: 8 lat temu

Ostatnio: 2 miesiące temu

0

I co zrobić, żeby pusty nie był.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace postc
{
    public partial class Form1 : Form
    {
        PFCalculator oblicz;

        public Form1()
        {
            InitializeComponent();
        }

        public class PFCalculator
        {
            private string expr;

            public PFCalculator()
            {

                setExpr("");
            }

            public PFCalculator(string expr)
            {
                setExpr(expr);
            }

            public void setExpr(string expr)
            {
                this.expr = expr;
            }

            public string getResult()
            {
                Stack<string> stk = new Stack<string>();
                parse(expr.Split(' '), stk);
                return stk.Pop();
            }

            private void parse(string[] input, Stack<string> stack)
            {
                for (int i = 0; i < input.Length; i++)
                {

                    if (new Regex("^([0-9]+)?([.][0-9]+)?$").IsMatch(input[i]))
                        stack.Push(input[i]);

                    else
                        stack.Push(performOperatiopn(stack.Pop(), stack.Pop(), input[i][0]));<<<<tutaj wyskakuje ten wyjatek
                }
            }

            private string performOperatiopn(string operand1, string operand2, char operation)
            {
                double val1 = double.Parse(operand1);
                double val2 = double.Parse(operand2);
                switch (operation)
                {
                    case '+':
                        return (val2 + val1) + "";
                    case '-':
                        return (val2 - val1) + "";
                    case '*':
                        return (val2 * val1) + "";
                    case '/':
                        return (val2 / val1) + "";
                    case '%':
                        return (val2 % val1) + "";
                }
                return ""; 
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            String wyrazenie = "23+";
            oblicz = new PFCalculator(wyrazenie);
            label1.Text = oblicz.getResult();
        }
    }
}

Pozostało 580 znaków

2016-01-21 00:00

Rejestracja: 14 lat temu

Ostatnio: 1 minuta temu

0

23 to jedna liczba. Nie używaj armaty na muchę, oberwie ci się bardziej nisz musze.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2016-01-21 00:05
Moderator

Rejestracja: 12 lat temu

Ostatnio: 15 minut temu

Lokalizacja: Wrocław

0

Tak to jest, jak się bierze gotowce z internetu i nawet nie raczy wiedzieć, jakiej problematyki w ogóle ten kod dotyka. Ten wątek powinien polecieć prościutko do kosza.
23+ to nie jest prawidłowe wyrażenie, ponieważ + oczekuje dwóch operandów (dwóch liczb), a nie jednego.


edytowany 2x, ostatnio: Patryk27, 2016-01-21 00:06
Oj kurde, to nie tak. Owszem znalazłem to w necie, ale chodziło mi raczej o to,by ten kod przeanalizować z małą pomocą forum. Generalnie szukam kodu, który policzy mi wartość wyrażenia postfixowego, czyli jak mam string "23+", to żeby program policzył 2+3. - finito 2016-01-21 00:19
2 3 +, w takim razie. - Patryk27 2016-01-21 08:11

Pozostało 580 znaków

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