While-Schleife Endet zu früh


  • Administrator

    hustbaer schrieb:

    Dravere schrieb:

    Bezüglich dem "ohne Worte" von hustbaer:

    Det war nischt isch.

    Korrigiert, sry. Irgendwie etwas geschielt 🙂



  • Sie können nicht kleiner als null sein aber Null.
    Um es zu kompletieren hier werden alle '(' und ')' in dem Term gezählt sind sie ungleich liegt ein fehler vor (return -1).
    Sind die Variablen gleich und größer null exestieren Klammern die ich zuerst berechnen muss folglich (return Klammern).
    sind die Variablen gleich aber 0 gibt es keine Klammern (return 0).

    Darüber hinaus muss ich sagen das ich das gesammte in den letzten 3Tagen geschrieben habe und ich einfach mal Blind drauf los geschreiben hab, dass einzige was man ändern könnte ist ...

    // ...
    
                if (offeneKlammern == geschlosseneKlammern)
                {
                    if (offeneKlammern > 0) // da beide Variablen ja schon auf Gleichheit geprüft wurden
                    //if (offeneKlammern > 0 && geschlosseneKlammern > 0)
                    {
                        return 1;  // weil es für den weiteren Programmcode nur ausschlaggeben ist ob  der return größer 0 ist
                        //return offeneKlammern;
                    }
                    else
                    {
                        return 0;
                    }
                }
                return -1;
    


  • Gobbles schrieb:

    // ...
     
                if (offeneKlammern == geschlosseneKlammern)
                {
                    return offeneKlammern;  // weil es für den weiteren Programmcode nur ausschlaggeben ist ob der return größer 0 ist                
                }
                return -1;
    

    ftfy.

    ~// edith: Tagsoup~


  • Administrator

    Wenn wir schon mal bei dieser Funktion dabei sind, wieso nicht ein bool als Rückgabewert? Du hast noch mindestens eine andere Funktion, wo du einen int statt eines bool zurückgibst. Dann kannst du nämlich auch die Funktion gleich in der If-Abfrage hinschreiben. Und wenn du den Namen noch etwas anpasst, dann bekommst du sowas:

    if(enthältKlammern())
    {
      // ...
    }
    

    Wobei ich persönlich auf deutsche Bezeichner verzichten würde. Und ja, Umlaute und solches Zeug sind erlaubt als Variablenname.

    Für den Fehlerfall, also wo die Anzahl Klammern nicht übereinstimmen, solltest du auch einen Fehler werfen. Heisst du solltest dann besser Exceptions verwenden. Am besten machst du dir eine MathTermSyntaxException oder sowas.



  • Dravere schrieb:

    Am besten machst du dir eine MathTermSyntaxException oder sowas.

    Bzw. für Fälle wo man etwas beobachtet was eigentlich überhaupt gar nicht sein dürfte, z.B. weil man den Input eigentlich schon validiert hat, und dann doch noch einen Fehler findet, eine InternalErrorException .



  • Int als rückgabe hatte ich gewählt um die 3 Zustände (keine Klammer,Klammer oder fehlerhafte Klammersetzung) zu bekommen.
    Mit Exceptions habe ich bis dato noch nichts gemacht, werde mir es mal anschauen was das so kann 🙂


Anmelden zum Antworten