If abfragen (+, - , /, *)

sk1988

Mitglied
Einen wunderschönen guten Abend,
ich hab hier einen Code in dem er mehrere If abfragen durchgehen soll, jeweils welcher Operator ausgewählt wurde.

Java:
    public static void main(String[] args) {


        double zahl1; // Eingabe 1
        double zahl2; // Eingabe 2
        String operator; // Eingabe Operator
        
        
        zahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben sie die erste Zahl ein"));
        operator = JOptionPane.showInputDialog("Bitte geben sie +,-,/ oder : ein");
        zahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben sie die zweite Zahl ein"));
        
        if (operator == +) {
            System.out.println("Das Ergebnis ist "+ summeplus(zahl1, zahl2));
        }
    
    }

}

Leider erkennt er mein If(operator == +) nicht an, kann mir da jemand weiter helfen wie ich die operatoren abfragen kann?
Danke schonmal
mfg Stefan
 
Nur das + ist im Java Code ein Operator. Da Du da ja nichts addieren willst, ist das so schon falsch.

Du hast in einer Variablen eine Zeichenkette und willst diese vergleichen.
--> Was Du also willst ist ein String Literal: https://www.geeksforgeeks.org/literals-in-java/ - Eine Zeichenkette nur mit einem + wäre "+"
--> Strings sind Referenz-Typen. Diese vergleicht man nicht mit == sondern mit equals.
 
Danke, da sind ein Haufen Sachen dabei die mir noch überhaupt nichts sagen 🙂

Java:
import javax.swing.JOptionPane;
public class xxx {

    


    static double potenz(double p_basis, double p_exponent) {
        
        double potenz = 1 ;
        
        
        for (int i =1 ; i<=p_exponent ; ++i)
            
        {
            potenz = potenz * p_basis ;
        
        }
        return potenz;
        
        
    }

    // Methode Plus
    static double summeplus(double a,double b){
        
        return (a + b); }
    
    // Methode Minus
    static double summeminus(double a,double b) {
        
        return (a - b); }
    
    // Methode Multiplizieren
    static double summemultiplizieren(double a, double b) {
        
        return (a * b); }
    
    // Methode Dividieren
    static double summedividieren(double a, double b) {
    
        return (a / b);
    }
    
    public static void main(String[] args) {


        double zahl1; // Eingabe 1
        double zahl2; // Eingabe 2
        String operator; // Eingabe Operator
        
        //Eingaben
        
        zahl1 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben sie die erste Zahl ein"));
        operator = JOptionPane.showInputDialog("Bitte geben sie +,-,*, / oder Potenz ein");
        zahl2 = Double.parseDouble(JOptionPane.showInputDialog("Bitte geben sie die zweite Zahl ein"));
        
        //Ausgaben
        
        if (operator.equals("+")) {
            System.out.println("Das Ergebnis ist "+ summeplus(zahl1, zahl2));
        }
            
        else if (operator.equals("-")) {
            System.out.println("Das Ergebnis ist "+ summeminus(zahl1, zahl2));
        }
        
        else if (operator.equals("/")) {
            System.out.println("Das Ergebnis ist "+ summedividieren(zahl1, zahl2));
        }
        
        else if (operator.equals("*")) {
            System.out.println("Das Ergebnis ist "+ summemultiplizieren(zahl1, zahl2));
        }
        
        else if (operator.equals("Potenz")) {   
            System.out.println("Das Ergebnis ist "+ potenz(zahl1, zahl2));
        }

    }
}

habe es jetzt so, mit einer wahrscheinlich sehr simplen Lösung gemacht, die Rechnungen finden in 5 separaten Methoden statt.
 
Da Du noch direkt am Anfang bist und es bei Dir ja erst um das generelle Verständnis von Java gehen dürfte: Ignorier solche Lösungsideen - diese sind für Dich aus meiner Sicht nicht hilfreich.

Bei Dir dürfte es vor allem darum gehen, dass hier Dinge in Methoden ausgelagert wurde und das hast Du gut gelöst. Was nur auffällt sind die Methodennamen. Diese sollten ja vom Namen her passen und sagen, was da gemacht wird (Ein Verb hilft da!). Dabei dann camelCase verwenden um zusammengesetzte Worte sichtbar zu machen.
"summeplus" - summe und plus sind doppelt - Eine Summe ist ja die Addition zweier Werte und damit der "plus" Operator. Und es wird etwas berechnet, daher wäre doch ein Name wie "berechneSumme" besser. Oder einfach "summiere" oder "addiere".
"summeminus" - das ist jetzt irritierend - denn bei der Subtraktion geht es ja nicht um eine Summe sondern um eine Differenz. "berechneDifferenz" wäre da dann der bessere Name, oder einfach "subtrahiere". Ähnliches gilt für die anderen beiden Methoden mit "summe".

Das ist aber nur ein einfacher Hinweis. Das mag gerade am Anfang übertrieben erscheinen, aber sobald Code etwas umfangreicher wird, ist dies existenziell. Wenn jemand liest: summedividieren(4, 2) - dann wäre doch die Frage: Welche summe wird dividiert? Hier wäre dann ein einfaches "dividiere" oder "berechneQuotient" eher angebracht.
 
Danke,
Ja das macht auf jedenfall Sinn, ich werde versuchen besser verständliche Bezeichner zu nutzen.
Ich selber weiß worum es geht aber jemand anders, hätte wohl Probleme, wen der Code größer und umfangreicher wird
 
Also ich kann Dich nicht verstehen Tobias (Ich gehe davon aus, dass Du unser allseits bekannter Störenfried Tobias bist ... Ich winke mal zum Abschied oder machst Du sofort wieder einen neuen Account?


Einfach mal ein paar Punkte:
- Selbst Du solltest erkennen, dass der TE ein Anfänger ist. Bist Du ernsthaft der Meinung, dass Dein Code ein hilfreicher Beitrag war? Was sollte er Deiner Meinung nach aus Deinem Code lernen (Zumal Du ihm nur den Code hingeworfen hast ohne jede Erläuterung!)

- Der Thread Ersteller hat sehr deutlich geschrieben (#4), dass das Problem gelöst ist. Was also war Dein Punkt, der so wichtig ist für den TE?

- Dann ist Deine Lösung so nicht funktionsfähig bei Java Versionen >= 15, da die Nashorn Script Engine mit Java 15 entfernt wurde. Da wäre also eine Abhängigkeit zu z.B. der Script Engine von GraalVM notwendig. (Hattest Du bezüglich Spotbugs und den NonNull/Nullable Annotations mir geschrieben, dass dies ganz schlimm sei wegen zusätzlicher Abhängigkeiten?)

Du kannst gerne Argumente bringen! Ich lerne sehr gerne dazu. Aber leider zeichnest Du Dich durch pure Meinung und dem verweigern jeglicher Argumente aus. Daher ist es leider reine Zeitverschwendung, sich hier weiter auseinander zu setzen und Zeit in irgendwelche sachlichen Erwiderungen zu stecken.
 
Naja, ich denke, ich habe das Problem schon gut wiedergegeben, sie reden viel aber sagen wenig.
Wie wäre es denn, wenn Du einfach mal endlich Argumente bringen würdest?
Wenn das Problem aus Sicht des TE mit #4 schon gelöst ist, dann ist doch alles gut. 🙂 Eine Lösung muss ja nicht richtig sein...
Was ist denn genau falsch? Die Lösung des TE war ja noch nicht genannt, aber es wurde ja in #2 von @httpdigest und in #3 von mir etwas geschrieben worden. Wo siehst Du Probleme? Wo ist etwas falsch?

Wieso ist dein Code eine Lösung, wenn jemand z.B. Java 17 nutzen sollte?

Und was ist konkret falsch an der Lösung des TE, die er in #6 gebracht hat? Hier erzählst Du viel ohne irgend etwas konkretes zu sagen. Oder in anderen Worten: Du unterstellst unterschwellig Dinge (hier, dass die Lösung nicht richtig sei) ohne irgend etwas zu belegen.

So kommt es zu einer Problematik, um die sich dann in Kürze Moderatoren / Admins kümmern dürfen ...
 
Ich versuche ständig, sachliche Punkte zu bringen. Von Dir kommt leider nichts in der Art!

Und jetzt ein "demokratischer Diskurs"? Was hast Du geraucht? In erster Linie geht es um eine Diskussion:
Eine Diskussion ist ein Dialog ..., wobei jede Seite ihre Argumente vorträgt.

Also wie wäre es, wenn Du endlich einmal Deine Polemik sein lassen würdest und Argumente bringen würdest. Und da wunderst Du Dich, dass Du ständig gesperrt wirst und neue Accounts erzeugen musst?

Man könnte sich auch überlegen, um was es hier im Forum geht - und da würde ich etwas sagen wie: Leuten, die mit Fragen kommen, helfen.
==> Wo sind Deine Beiträge auch nur etwas hilfreich?

Aber damit ist es erst einmal erledigt ... wie gesagt: Das Problem lösen (hoffentlich) in Kürze Andere.
 
Ich bin aufjedenfall dankbar für JEDE Antwort die mir weiterhilft. Denke nicht das es Sinn der Sache ist zu diskutieren welche richtig / falsch ist, ps_one seine Antwort wird definitiv auch funktionieren, nur ich verstehe es leider noch nicht 🙂 ( ich habe grundkenntnisse in VBA, und an java bin ich erst 3 tage)
KonradN hat mir die Lösung gegeben die ich verstehen und umsetzen konnte.

Gibt es Seiten oder Programme die mein jetziges wissen stärken können, sprich Aufgaben die noch ziemlich simpel sind ? Ich hatte mal etwas gegoogelt, in den meisten Seiten sind die Aufgaben ziemlich schwer / fortgeschritten. Ich kann bis jetzt nur If / Case abfragen und schleifen.

Gruß Stefan
 
Konzentriere Dich erst noch etwas mehr auf die grundlegende Syntax von Java um das möglichst schnell halbwegs zu können.

An Aufgaben kannst Du Dich auch im Forum umschauen - es gab vor kurzem einige Threads, wo Leute einfach eingescannte Aufgaben gepostet haben (einfach mal 2 oder 3 Tage zurück schauen ... "OOP" oder so war da der Betreff.

Ein Buch, das etwas sein könnte: Captain CiaoCiao erobert Java
Ich selbst kenne es nicht im Detail, aber der Autor versucht, diese Lücke zu schließen.

Ansonsten schau einfach, dass Du ein paar erste Programme selbst schreibst. Versuch es aber am Anfang einfach zu halten und bau dann nach und nach darauf auf. Also wenn möglich nicht zu viel Neues auf einmal. Und immer mehr darauf konzentrieren, was das Ziel ist: Java Grundkenntnisse erwerben und vertiefen.

Wenn Du das hast, dann wäre ein Buch wie "Entwurfsmuster von Kopf bis Fuß" sinnvoll. Da werden diverse Möglichkeiten erläutert, wie man etwas aufbauen kann. Parallel dazu dann auch Clean Code betrachten (https://clean-code-developers.de).

Damit hast Du den Grundstock, mit dem Du dann loslegen kannst: Dann kannst Du Dir überlegen, wohin du gehen willst um dann bei einem Projekt weitere Technologien zu erarbeiten. Sei es eine GUI (Also mit Swing, JavaFX oder SWT) oder mehr Richtung Enterprise mit einem Framework wie Spring Boot, Quarkus, ...
 
Du kannst Dir in diesem Zusammenhang auch einmal die switch-case Anweisung anschauen. Die erspart Dir bei dieser Aufgabe viel Schreibarbeit hinsichtlich der if und else if Verschachtelungen und das erstellen von Methoden für die einzelnen Operatoren wird damit auch überflüssig. Aber für das Erlernen der Objektorientierung ist das was du gemacht hast natürlich sehr hilfreich.
 

Zurück
Oben