OutOfRange Fehler



  • Hallo,
    ich bin relativ neu in C# und habe das Problem das ich bei meiner Methode "Calc" immer ein OutOfRange Fehler kriege. Könnte mir jemand helfen oder erklären wie ich das umgehen kann?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Test1
    {
        class Program
        {
            static void GetEquation(uint numberEquation, ref double[,] equationArrayNumbers)
            {
                string stringBuffer = ""; //Gleichung zwischenspeichern
    
                int mainCounter = 0;
    
                string[] stringCache;
    
                for (uint firstIntegerCounter = 0; firstIntegerCounter != numberEquation; firstIntegerCounter++) //Einlesen der Gleichungen
                {
                    Console.Write("Geben sie eine Gleichung ein (geordnet mit Nullen): "); //Erfragen der Gleichung
                    stringBuffer = Console.ReadLine(); //Abfragen der Gleichung
    
                    Console.WriteLine("Gleichung wird verarbeitet...");
    
                    stringBuffer = stringBuffer.ToUpper();
    
                    stringBuffer = stringBuffer.Replace(" ", String.Empty);
    
                    stringBuffer = stringBuffer.Replace("-", "+-");
    
                    stringCache = stringBuffer.Split(new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '+', '/', '*', '=' });
    
                    foreach (string foreachString in stringCache)
                    {
                        if (foreachString != "")
                        {
                            equationArrayNumbers[firstIntegerCounter, mainCounter] = Convert.ToDouble(foreachString);
                            ++mainCounter;
                        }
                    }
    
                    mainCounter = 0;
                    Console.WriteLine(); //Neue Abfrage
                }
            }
    
            static void ShowArrayDouble(uint maxRow, uint maxColumn, double[,] doubleArray, bool mode)
                {
                    if (mode == true)
                    {
                        Console.Clear();
                    }
                    else
                    {
                        Console.WriteLine();
                    }
    
                    for (uint columnCounter = 0; columnCounter != maxColumn; columnCounter++)
                    {
                        for (int rowCounter = 0; rowCounter != maxRow - 1; rowCounter++)
                        {
                            if (doubleArray[columnCounter, rowCounter] < 1)
                            {
                                Console.Write("FFF ");
                            }
                            else if (doubleArray[columnCounter, rowCounter] < 10)
                            {
                                Console.Write(doubleArray[columnCounter, rowCounter] + "FF ");
                            }
                            else if (doubleArray[columnCounter, rowCounter] < 100)
                            {
                                Console.Write(doubleArray[columnCounter, rowCounter] + "F ");
                            }
                            else
                            {
                                Console.Write(doubleArray[columnCounter, rowCounter] + " ");
                            }
                        }
    
                        Console.WriteLine();
                    }
                }
    
            static void Calc(ref double[,] doubleArray, uint numberEquation)
            {
                for (int first = 0; 1 < numberEquation - 1; first++)
                {
                    for (int second = 0; first + 1 < numberEquation; second++)
                    {
                        doubleArray[first, second] = doubleArray[first, second] / doubleArray[first, first];
    
                        for (int third = 0; third < numberEquation; third++)
                        {
                            doubleArray[second, third] = doubleArray[second, third] - doubleArray[second, first] * doubleArray[first, third];
                        }
                    }
                }
            }
    
            static void Main(string[] args)
            {
                //Variablen erstellen
                uint numberEquation = 0; //Anzahl an Gleichungen
                uint numberCharacters = 0; //Anzahl an Buchstaben
    
                //Hauptcode
                Console.Write("Wie viele Gleichungen sollen eingegeben werden?: "); //Erfragen der Anzahl der Gleichungen
                numberEquation = Convert.ToUInt32(Console.ReadLine()); //Abfragen und konvertieren
    
                double[,] equationArray = new double[numberEquation, numberCharacters]; //Array um die Zahlen zu speichern
    
                GetEquation(numberEquation, ref equationArray); //Abfrage der Gleichungen starten
                Console.WriteLine(); //Abfrage beendet
    
                ShowArrayDouble(27, numberEquation, equationArray, false);
    
                Calc(ref equationArray, numberEquation);
    
                ShowArrayDouble(27, numberEquation, equationArray, false);
    
                //Ende
                while (true) { } //Fenster aufhalten
            }
    
        }
    }
    


  • Hallo,

    welchen Wert hat denn "numberCharacters" wenn du das Array initialisierst? Das sollte dein Problem lösen, wenn du das korrigierst.



  • Ein Problem sollten auch die kaputten Schleifen in der Calc Methode sein...



  • Ich hab die Schleifen jetzt verändert:

    static void Calc(ref double[,] doubleArray, uint numberEquation)
            {
                for (uint first = 0; first != numberEquation - 1; first++)
                {
                    for (uint second = 0; first + 1 != numberEquation; second++)
                    {
                        doubleArray[second, first] = doubleArray[second, first] / doubleArray[first, first];
    
                        for (uint third = 0; first != numberEquation; third++)
                        {
                            doubleArray[second, third] = doubleArray[second, third] - doubleArray[second, first] * doubleArray[first, third];
                        }
                    }
                }
            }
    

    und "numberCharacters" wird mit je nach Gleichung initialisierst. Bei

    4x+9y-7w=20
    

    z.B. würde sie mit 4 (da 4 Zahlen) initialisierst werden. Hab den Code gestern aus versehen raus geschnitten. Trotzdem kriege ich einen Fehler in der 3. for-Schleife und "third" ist auch größer als "numberEquation".



  • Schleife zwei und drei sind immer noch Endlosschleifen.