Formel rechner in Java - wie?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Wie sieht es mit Deinen Java-Kenntnissen aus? Möchtest Du vordefinierte Formeln eingeben oder maximale Flexibilität wie bei einem richtigen Taschenrechner haben? Soll es eine graphische Oberfläche (GUI) geben oder soll es eine Konsolenanwendung sein?

Nehmen wir mal die Formel



Im Code fragst Du über einen Scanner (oder auch über eine graphische Oberfläche) die drei Variablen ab und führst die Rechnung aus:

try (Scanner scanner = new Scanner(System.in)) {
  System.out.print("a = ");
  double a = scanner.nextDouble();

  System.out.print("b = ");
  double b = scanner.nextDouble();

  System.out.print("c = ");
  double c = scanner.nextDouble();

  double result = a * Math.sqrt(b + Math.pow(c, 2));
  System.out.println("Ergebnis: " + result);
} catch(InputMismatchException e) {
  System.out.println("Fehler: Ungültige Zahl! Punkt statt Komma verwenden!");
}

Wie du siehst, ist das total unflexibel und ein wirklicher Taschenrechner wird das nicht. Besser wäre ein echter Taschenrechner, auf welchem Du Tasten betätigen kannst und somit beliebige Rechnungen möglich sind. Dafür benötigst Du einen Parser. Hier findest Du solch einen fertigen Parser.

Du kannst aber auch einen eigenen Parser implementieren, falls Du dir das zutraust. Schau Dir dazu Folgendes an:

Ziel ist, einen Term in Infixnotation in einen Term in RPN-Notation umzuwandeln. Diesen kann man nämlich ziemlich einfach in Java parsen. Dies ist erforderlich, weil verschiedene Operatoren unterschiedliche Rangfolgen haben und somit nicht alles von links nach rechts gerechnet werden kann. Bei der RPN-Notation ist alles direkt so geordnet, wie es auch abgearbeitet werden soll.

Melde Dich gerne bei weiteren Fragen ;-)


phillip1872r 
Beitragsersteller
 06.02.2019, 07:59

Ok , danke war verstädnlich.

Mir reicht es ohne GUI ,wie mache ich es jetzt mit ner 2ten Formel z.B.

1. a+b/c = d+e/f

2. X+y/z / axc/d

Also nur ale beispiel.

Und das man immer eine variable offen hat z.B. x und die so berechnet wird?

0
tavkomann  06.02.2019, 16:06
@phillip1872r

Willst du Gleichungen lösen? Entweder du kennst die Terme schon und formst sie bereits vor dem Schreiben des Programms um. In Gleichung 1 wäre das nach a umgeformt beispielsweise:

double a = d + e/f - b/c

Die Variablen fragst du, wie in der Antwort beschrieben ab.

Oder, das ist die komplexere Variante, du entwickelst einen Gleichungslöser. Dafür kannst du dir JAMA ansehen oder selbst etwas implementieren, was jedoch nicht gerade trivial ist und entsprechende mathematische Kenntnisse voraussetzt.

0
phillip1872r 
Beitragsersteller
 06.02.2019, 16:10
@tavkomann

ok ich werde die dann easy umformen , vielen dank , wie mache ich die auswahl zwischen 2 formeln?

2

0
phillip1872r 
Beitragsersteller
 06.02.2019, 16:33
@phillip1872r

also z.B.

double Formel, ...

System.out.println("Wählen sie die Formel aus (1o2)");
Formel=wert.nextDouble();

und dann evt mit If schelifen?
if(wert==1){
 System.out.println("Wert für X eingeben"); 
...
 else{ System.out.println("Wert für Y eingeben");
 Y=scannerWert.nextDOuble 
0
tavkomann  06.02.2019, 20:49
@phillip1872r

Ja, das würde klappen. Jedoch solltest du statt double und nextDouble besser int und nextInt verwenden, weil du für die Auswahl schließlich keine Kommazahlen, sondern nur Ganzzahlen benötigst. Außerdem gibt es keine if-Schleifen – man nennt sie if-Abfragen.

0
phillip1872r 
Beitragsersteller
 06.02.2019, 20:51
@tavkomann

Bin halt neu ,von daher habe ich keine ahnung von den begriffen :D aber vielen dank für die kompetente hilfe :D Was haben int denn für vorteile?

1
tavkomann  06.02.2019, 21:05
@phillip1872r

Ints nehmen nur halb so viel Speicherplatz ein. Aber selbst wenn das nicht so wäre, versucht man immer, einen im Anwendungskontext möglichst sinnvollen Datentyp zu wählen. Hier brauchst du keine Kommazahlen, deswegen kannst du durch die Wahl des Datentyps int dafür sorgen, dass eine Kommazahl niemals akzeptiert wird.

0

Da bleibt Dir wahrscheinlich nur übrig, den eingegebenen String selbst zu scannen/parsen.

Schleife über alle Zeichen, selbst entscheiden, ob gültig, ob Recheoperation, Klammer auf/zu, ... Dafür hast Du dann alles selbst in der Hand, kannst Funktionen einbauen wie und welche Du willst.

Ich denke auch, dass Du mit System-Funktionen für die Eingabe auch nicht hinkommst, sondern Controls nehmen musst.

Wird nicht einfach, macht aber Spaß, wenn es endlich funktioniert.

Wie hier leider üblich, hast Du nichts über Dein System geschrieben, Windows, Android, Dein Entwicklungssystem, ...

Mit viel Glück findest Du im Internet ein Programm, das in diese Richtung geht und von Dir modifiziert werden kann. Aber wie geschrieben, welches System?


phillip1872r 
Beitragsersteller
 05.02.2019, 19:04

Ein Normales Java-Programm in Eclipse auf meinem Windows System.

0