Ergebnis 1 bis 4 von 4
  1. #1
    america1969 ist offline Grünschnabel
    registriert
    08-01-2017
    Beiträge
    2

    [JavaScript] Bitte um Codecheck - Taschenrechner; Fehler "NaN" (Not a Number)

    Liebes Forum,

    ich möchte einen JavaScript-Taschenrechner programmieren, der z.B. ohne die geläufigen Funktionen "Math" und "Eval" und dergleichen auskommt.

    Daher arbeite ich beim einlesen der Rechenoperation (z.B. "6-3=") mit zwei Arrays. So war halt meine Überlegung.
    In einem Array speichere ich die eingegebenen Ziffern, im anderen den Operanden.

    Gelöst habe (hätte) ich das mit einer "for"-Anweisung.

    Als Rechenergebnis erhalte ich aber immer "NaN" (Not a number).

    Könnt ihr mir bitte weiterhelfen.

    Ich habe den Code derzeit auch so erweitert, dass fast bei jedem Schritt ein window.alert ausgegeben wird.
    Da sieht man auch gut, dass meiner Meinung nach die Array nicht richtig beschrieben werden ...
    Ich steh da echt an....

    Vielen Dank, wenn ihr da einen tipp hättet (bitte nicht: kopiere dir einen funktionierenden Code aus dem Internet).

    Liebe Grüße,
    Robert

    Hier der Code:

    HTML-Code:
    <!DOCTYPE html>
    
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <title>Taschenrechner</title>
            <style>
                input{
                    width: 50px;
                    height: 50px;
                }
            </style>
            <script>
                
    			var eingabe = ""
                function add1(x, eingabe) {
                    eingabe += x;
    				//window.alert("Diese Zahl wurde gerade eingegeben und in den Wert x der function add1(x,eingabe) geschrieben: "+x)
    				//window.alert("Diese Zahl wurde gerade eingegeben und in den Wert eingabe der function add1(x,eingabe) geschrieben: "+eingabe)
                    document.getElementById("eingabe").innerHTML = eingabe;
    				return eingabe;
                }
                function add2(x, eingabe) {
                    eingabe += "" + x + "";
    				//window.alert("Dieses Zeichen wurde gerade eingegeben und in den Wert x der function add2(x,eingabe) geschrieben: "+x)
    				//window.alert("Dieses Zeichen wurde gerade eingegeben und in den Wert eingabe der function add2(x,eingabe) geschrieben: "+eingabe)
                    document.getElementById("eingabe").innerHTML = eingabe;
    				return eingabe;
                }
    
    						
                function rechne(eingabe) {
                    var i = 0;
                    var j = 0;
                    var zahlen = new Array();
                    var zeichen = new Array();
                    var ergebnis = 0;
                    eingabe += "=";
                    window.alert("Das ergibt den gesamten Eingabestring: " + eingabe + "<Ende der Eingabe");
    
                    
                    for (i = 0; eingabe.charAt(i) != '='; i++)  {
    					 
                        if (eingabe.charAt(i) == '+' || eingabe.charAt(i) == '-' || eingabe.charAt(i) == '*' || eingabe.charAt(i) == '/') {
                            zeichen[j] = eingabe.charAt(i);
                            window.alert("Zeichen, das im Zeichen-Array an Position " + i + " steht: " + zeichen[j]);
                            //window.alert("Zeichen, das im Zeichen-Array an Position 0 steht" +  zeichen[0]);
                            j++;
                        }
                        else {
                            window.alert("Zahl: " + (eingabe.charAt(i)));
                            zahlen[j] = parseInt(eingabe.charAt(i));
                            window.alert("Zahl, die im Zahlen-Array an Position " + i + " steht: " + zahlen[j]);
                            //window.alert("Zahl, die im Zahlen-Array an Position 1" +  zahlen[1]);
                            j++;
                        }
                    }
                    
                    ergebnis = zahlen[0]; //Warum wird hier nur zahlen0 abgefragt?? Vielleicht ist das Problem??
    				window.alert("Ergebniswert von zahlen0:"+ergebnis)
                    for (j = 1; j < zahlen.length; j++) {
                        if (zeichen[j] == '+') {
                            ergebnis += zahlen[j];
                        }
                        if (zeichen[j] == '-') {
                            ergebnis -= zahlen[j];
                        }
                        if (zeichen[j] == '*') {
                            ergebnis *= zahlen[j];
                        }
                        if (zeichen[j] == '/') {
                            ergebnis /= zahlen[j];
                        }
                    }
                    document.getElementById("eingabe").innerHTML = ergebnis;
    				window.alert("Ergebnis der Rechnung: "+ergebnis)
                    return ergebnis;
                }
    
                function remove_all(eingabe) {
                    eingabe = "";
                    document.getElementById("eingabe").innerHTML = 0;
                    return eingabe;
                }
    
                function remove_number(eingabe) {
                    eingabe.charAt(eingabe.length() - 2) = '';
                    document.getElementById("eingabe").innerHTML = eingabe;
                    return eingabe;
                }
    
            </script>
        </head>
        <body>
            <p id="eingabe">0<br></p>
            <form>
                <input type="button" value="C" onclick="eingabe = remove_all(eingabe)">
                <input type="button" value="<--" onclick="eingabe = remove_number(eingabe)"> <br>
                <input type="button" value="7" onclick="eingabe = add1(7,eingabe)">
                <input type="button" value="8" onclick="eingabe = add1(8,eingabe)">
                <input type="button" value="9" onclick="eingabe = add1(9,eingabe)"> 
                <input type="button" value="/" onclick="eingabe = add2('/',eingabe)"><br>
                <input type="button" value="4" onclick="eingabe = add1(4,eingabe)">
                <input type="button" value="5" onclick="eingabe = add1(5,eingabe)">
                <input type="button" value="6" onclick="eingabe = add1(6,eingabe)">
                <input type="button" value="x" onclick="eingabe = add2('*',eingabe)"> <br>
                <input type="button" value="1" onclick="eingabe = add1(1,eingabe)">
                <input type="button" value="2" onclick="eingabe = add1(2,eingabe)">
                <input type="button" value="3" onclick="eingabe = add1(3,eingabe)">
                <input type="button" value="-" onclick="eingabe = add2('-',eingabe)"> <br>
                <input type="button" value="0" onclick="eingabe = add1(9,eingabe)">
                <input type="button" value="," onclick="eingabe = add1(',',eingabe)">
                <input type="button" value="=" onclick="ergebnis = rechne(eingabe)">
                <input type="button" value="+" onclick="eingabe = add2('+',eingabe)">
            </form>
        </body>
    </html>
    Angehängte Dateien Angehängte Dateien
    Geändert von mikdoe (08-01-2017 um 14:04 Uhr) Grund: Code Tags

  2. #2
    zirzofer Guest

    AW: [JavaScript] Bitte um Codecheck - Taschenrechner; Fehler "NaN" (Not a Number)

    1. zuallererstmal setzt du bitte code-tags http://forum.jswelt.de/forum/60175-c...ig-setzen.html (Code-Tags richtig setzen)
    2. Zitat Zitat von america1969 Beitrag anzeigen
      Ich habe den Code derzeit auch so erweitert, dass fast bei jedem Schritt ein window.alert ausgegeben wird.
      die idee is ja löblich, bloß solltest du das auf eine andere art ausgeben - genau dafür gibt es die konsole: http://forum.jswelt.de/javascript-fa...n-konsole.html (Arbeiten mit der Konsole)
    3. Zitat Zitat von america1969 Beitrag anzeigen
      der z.B. ohne die geläufigen Funktionen "Math" und "Eval" und dergleichen auskommt.
      Der Verzicht auf eval() klingt erstmal nicht schlecht, aber auf was genau willst du/was genau verstehst du unter/warum willst du auf "Math" verzichten?
    4. Zitat Zitat von america1969 Beitrag anzeigen
      Als Rechenergebnis erhalte ich aber immer "NaN" (Not a number).
      Ich habe den code bis jetzt nur ganz kurz überflogen, aber die zeile baut einen - seltsamen - string, von daher bin ich mir zu 99% sicher, dass du probleme mit datentypen hast:
      eingabe += "" + x + "";

  3. #3
    america1969 ist offline Grünschnabel
    registriert
    08-01-2017
    Beiträge
    2

    AW: [JavaScript] Bitte um Codecheck - Taschenrechner; Fehler "NaN" (Not a Number)

    Servus,

    vielen dank für Deine Antwort - Punkte 1-2 werde ich gerne beachten. Danke für den Hinweis.

    Zu Punkt 3: Ich will versuchen, diese Herausforderung des Taschenrechners ohne die Funktion "Math" zu realisieren. Deswegen habe ich das "umständlich" derzeit mit den Arrays, etc. gelöst.

    Zu Punkt 4: ok, ich werde mir vor allem diese Zeile betreffend des Strings "Eingabe" nochmals zu gemüte führen.

    Nochmals danke,
    liebe Grüße

  4. #4
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.700

    AW: [JavaScript] Bitte um Codecheck - Taschenrechner; Fehler "NaN" (Not a Number)

    Zitat Zitat von america1969 Beitrag anzeigen
    ohne die Funktion "Math"
    Math ist ein Objekt, das verschiedene mathematische Funktionen bereitstellt, und selber keine Funktion: https://developer.mozilla.org/en-US/...l_Objects/Math

    Zu deinem Problem: lass' dir mal mit console.log() die beiden Arrays zahlen und zeichen ausgeben und schau' dir dann deine "Rechenschleife" genauer an. Das sieht nicht so aus, wie du es gerne hättest...

    Aber dein jetziger Ansatz funktioniert sowieso nur bedingt. So kannst du nur einstellige Zahlen verarbeiten und "Punkt-vor-String" wird auch nicht beachtet. Eigentlich müsstest du aus der Eingabe einen Berechnungbaum erstellen und diesen dann auswerten.

    PS:
    Code:
    for (j = 1; j < zahlen.length; j += 2) {
    	if (zeichen[j] == '+') {
    		ergebnis += zahlen[j + 1];
    	}
    	if (zeichen[j] == '-') {
    		ergebnis -= zahlen[j + 1];
    	}
    	if (zeichen[j] == '*') {
    		ergebnis *= zahlen[j + 1];
    	}
    	if (zeichen[j] == '/') {
    		ergebnis /= zahlen[j + 1];
    	}
    }
    erzeugt bei extrem einfachen Eingaben ein Ergebnis... aber auch nicht immer das richtige.

Ähnliche Themen

  1. "anfänger"-Taschenrechner funktioniert nicht
    Von Mr Magican im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 23-10-2008, 09:39
  2. if(parseInt("bla") == Number.NaN) ==> FALSE
    Von xplox im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 08-10-2008, 18:17
  3. Formulareingabe "to number"
    Von Daisy Dark im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 12-07-2007, 22:47
  4. "Fehler auf der Seite" bei Javascript
    Von Peter2000 im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 20-03-2006, 17:04
  5. JS-Taschenrechner ohne Dezimaltrennung mit "."
    Von mak_tha_Don im Forum JavaScript
    Antworten: 12
    Letzter Beitrag: 16-10-2003, 23:04

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •