C# Taschenrechner; Fehler mit Arrays

kiname

Cadet 3rd Year
Registriert
Nov. 2014
Beiträge
56
Hallo,

ich habe gestern mit c# begonnen und wollte nun einen Taschenrechner programmieren.
Dieser soll unter anderen die Punkt vor Strich Regel befolgen. Die Logik dazu hätte ich schon...
aber irgentwie ist der index außerhalb des Arrays wenn ich z.B. 6x6 eingebe(ich habe es im Quellcode kommentiert)
Es ist bestimmt nur ein billiger Anfängerfehler aber ich finde ihn einfach nicht ;)

Lg
kiname
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace MyCalc
{
    public partial class Form1 : Form
    {
        List<String> op = new List<String>();//liste der rechenoperatoren
        List<Double> zahlen = new List<Double>();//liste der zahlen
        String s = "";//zwischenspeicher für zahlen
        
        public Form1()
        {
            InitializeComponent();
        }

        private void btn_Click(object sender, EventArgs e)//je nachdem welche zahl gedrückt wurde oder komma
        {
            Button b = (Button)sender;
            s += b.Text;
        }

        private void op_Click(object sender, EventArgs e)//operator und zahl in double wert wird in liste hinzugefügt
        {
            Button b = (Button)sender;
            op.Add(b.Text);
            zahlen.Add(Double.Parse(s));
            s = "";
        }

        private void btn_istgleich_Click(object sender, EventArgs e)
        {

            Double erg = punktVorStrichRechnung();

            tb_ausgabe.Text = "" + erg;//ergebnis auf textfeld ausgeben

        }

        private Double punktVorStrichRechnung()//logik für punkt vor strich rechnung
        {
            for (int i = 0; i < zahlen.Capacity-1; i++)
            {
                tb_ausgabe.Text = "" + i;
                if (op[i].Equals("*"))
                {
                    zahlen[i + 1] = zahlen[i] * zahlen[i + 1];//<-- fehler bzw bei 6*6 -- die zahl lag außerhalb des bereichs
                    zahlen.RemoveAt(i);
                    op.RemoveAt(i);
                    i--;
                }
            }
            for (int i = 0; i < zahlen.Capacity-1; i++)
            {
                if (op[i].Equals("/"))
                {
                    zahlen[i + 1] = zahlen[i] / zahlen[i + 1];
                    zahlen.RemoveAt(i);
                    op.RemoveAt(i);
                    i--;
                }
            }
            for (int i = 0; i < zahlen.Capacity-1; i++)
            {
                if (op[i].Equals("+"))
                {
                    zahlen[i + 1] = zahlen[i] + zahlen[i + 1];
                    zahlen.RemoveAt(i);
                    op.RemoveAt(i);
                    i--;
                }
            }
            for (int i = 0; i < zahlen.Capacity-1; i++)
            {
                if (op[i].Equals("-"))
                {
                    zahlen[i + 1] = zahlen[i] * zahlen[i - 1];
                    zahlen.RemoveAt(i);
                    op.RemoveAt(i);
                    i--;
                }
            }


            return zahlen[0];
        }

    }
}
 
Hi Kiname,

ersetz mal zahlen.Capacity mit zahlen.Count
 
Danke!

ich hab es nun zum einen war es durch das ersetzten von Capacity zu Count, zum anderen weil ich den = operator und die letzte eingetippte zahl nicht in das jeweilige array gespeichert habe!
 
Zurück
Oben