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

america1969

New member
[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:
<!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>
 

Anhänge

  • tr_robert.txt
    5,4 KB · Aufrufe: 0
Zuletzt bearbeitet von einem Moderator:
AW: [JavaScript] Bitte um Codecheck - Taschenrechner; Fehler "NaN" (Not a Number)

  1. zuallererstmal setzt du bitte code-tags http://forum.jswelt.de/forum/60175-code-tags-richtig-setzen.html
  2. 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-faq/59953-arbeiten-konsole.html
  3. 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. 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 + "";
 
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
 
AW: [JavaScript] Bitte um Codecheck - Taschenrechner; Fehler "NaN" (Not a Number)

ohne die Funktion "Math"
Math ist ein Objekt, das verschiedene mathematische Funktionen bereitstellt, und selber keine Funktion: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_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.
 
Zurück
Oben