Dieser Artikel beschreibt die Java -Implementierung einfacher Expressionsrechnerfunktionen. Teilen Sie es für Ihre Referenz wie folgt weiter:
Lesen Sie in einem nicht negativen Integer -Berechnungsexpression, der nur +, -, *, / und berechnet den Wert des Ausdrucks.
Eingang
Die Testeingabe enthält mehrere Testfälle, in denen jeder Testfall eine Zeile mit nicht mehr als 200 Zeichen pro Zeile aufnimmt, die durch einen Raum zwischen Ganzzahlen und Operatoren getrennt sind. Es gibt keinen illegalen Ausdruck. Wenn es nur 0 in einer Zeile gibt, endet die Eingangseingabe und das entsprechende Ergebnis sollte nicht ausgegeben werden.
Ausgabe
Ausgabe 1 Zeile für jeden Testfall, dh der Wert des Ausdrucks, genau zu 2 Dezimalstellen.
Probeneingang
1 + 2
4 + 2 * 5 - 7/11
0
Probenausgabe
3.00
13.36
Dies ist ein einfacher Taschenrechner. Lassen Sie mich den Prinzip selbst erklären. Einfach ausgedrückt, es wird zwei Stapel zum Speichern der Werte und des anderen herstellen, um die Symbole für Addition, Subtraktion, Multiplikation und Abteilung zu speichern. Sie können auch Arrays verwenden, aber Javas eigene Stapelfunktion wird viel bequemer zu bedienen sein.
Es ist erwähnenswert, dass der zum Laden numerische Werte verwendete Stapel bis zu zwei numerische Werte speichern kann, dh für die Berechnung. Derjenige, der das Symbol installiert, besteht darin, eine zu installieren. Wenn wir auf ' *' und '/' stoßen, führen wir zuerst die Berechnung durch und drücken dann den Stapel. Übrigens müssen Sie beim Schreiben von Betriebsfunktionen auf die Reihenfolge der Operationen achten. Als ich es selbst schrieb, wurde ich lange wegen meiner Nachlässigkeit betrogen.
Der spezifische Code lautet wie folgt:
Paket temp; import java.util.scanner; import java.util.stack; public class p1237 {public static void main (string [] args) {scanner sc = neuer Scanner (System.in); String str = sc.Nextline (); while (! str.equals ("0")) {// Wenn er 0 erreicht, verwendete der Stapel, um Stapel <double> num = new Stack <double> (); // den Wert Stapel <Zeichen> md = neuer Stack <Zeichen> (); // add Operatoren hinzu "+", "-", ",", ","/"Str1 []. 0; if (num.size () <= 1) {// mindestens zwei Zahlen können in num.push (d) eingefügt werden; }} else {if (md.isempty ()) {// Wenn das Zeichen leer ist, fügen Sie Md.push hinzu ((str1 [i]). charat (0)); } else { char md1 = md.peek();// See what symbol is on the top layer of the stack char md2 = str1[i].charAt(0);// The symbol of ii/* * Let's write a function to judge based on the return value, and what symbol to run first*/ if (opration(md1, md2) <= 1) { double nextNum = num.pop();// Perform the stack to operieren // die Oberseite des Stack -Double dandnum = num.pop (); // darstellen den Boden des Stacks // dar, da es weniger als ein oder gleich ein oder gleich ist, zuerst das Symbol in MD in MD, dann auf das nachfolgende Symbol drücken und dann das Ergebnis in num.push (math (Nachnum, Nextnum, md.pop ())); md.push (str1 [i] .charat (0)); / * Sie können nicht */ //} else if (opration (md1, md2) == 2 // beurteilen Sie das nächste Symbol // && i + 2 <str1.length // && option ((str1 [i + 2]). Charat (0), md2)! // double nachnum = num.pop (); // num.push (math (NextNum, dachtnum, md2)); } else if (opration (md1, md2) == 2) {double nextnum = double.ValueOf (str1 [++ i]); // Erhalten Sie das nächste double dastnum = num.pop (); num.push (math (lastnum, nextnum, md2)); }}}}} if (! double nachnum = num.pop (); // system.out.printf ("%. 2f", math (Nachnum, Nextnum, md.pop ())); System.out.println (String.Format ("%. 2F", Math (Nachnum, Nextnum, Md.pop ())); } else if (num.size () == 1) {// system.out.printf ("%. 2f/n", num.pop ()); System.out.println (string.format ("%. 2f", num.pop ())); } str = sc.Nextline (); // Die nächste Operation erhalten}} private statische Doppelmath (Double Num1, Double Num2, Zeichen Pop) {// Verwenden Sie den Sweep -Fall, um den Übereinstimmungsschalter (Pop) {case ' +': return (num1 + num2) auszuführen; case ' -': return num1 - num2; Fall ' *': Rückgabe Num1 * Num2; Fall ' /': zurücksenden num1 / num2; } return (doppelt) 0; } private statische Int -Operation (char Md1, char md2) {if (md1 == '*' || md1 == '/') {if (md2 == '*' || md2 == '/') {return 0; // Wenn beide Multiplikation oder Division sind. ||. für (int i = 0; i <str.length (); i ++) {if (ch [i] <48 || ch [i]> 57) {return false; }} return true; }}PS: Hier sind einige Berechnungswerkzeuge für Ihre Referenz:
Online -mathematischer Ausdruck Einfacher Konvertierungs-/Berechnungstool:
http://tools.vevb.com/jisuanqi/exp_jisuanqi
Online -Berechnungsinstrument der Unarm Function (EQ) Lösung:
http://tools.vevb.com/jisuanqi/equ_jisuanqi
Online -Taschenrechner des Wissenschaftlichen Taschenrechners Online -Taschenrechner Online -Taschenrechner:
http://tools.vevb.com/jisuanqi/jsqkeexue
Online -Rechner_Standard Taschenrechner:
http://tools.vevb.com/jisuanqi/jsq
Für weitere Informationen zu Java -Algorithmen können Leser, die an dieser Website interessiert sind, die Themen "Java -Datenstruktur und Algorithmus -Tutorial", "Zusammenfassung der Java -Operation DOM -Knoten -Tipps", "Zusammenfassung der Java -Datei- und Verzeichnisoperationstipps" und "Zusammenfassung der Java -Cache -Operation Tipps" anzeigen
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.