Hilfe bei Java Taschenrechner

Peat

Mitglied
Hallo, ich bin sehr neu in java (ich hoff ich bin im richtigen thema)
ich benutz Eclipse workspace 2018-12
ich hab soweit meinen taschenrechner fertig gestellt er kann die üblichen rechen formeln (+,-,*,/)
aber mein cheff will umbedingt das er mehr kann ich hab versucht die letzten 2 tage die funktion 1/x hinzu zu fügen aber es nicht geschaft
meine kollegen arbeiten sich auch erst in java ein wir hatten zu 3t nach einen lösungsansatz gesucht und auch vieles probiert dennoch ohne erfolg
daher bitte ich euch mir den richtigen denkanstoß oder die reine rechen formel zu schreiben damit ich sie dann meinen taschenrechner hinzugeben kann

das ist mein code


Java:
package Taschenrechner01;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import java.awt.Color;
import java.awt.SystemColor;

public class Taschenrechner01<trade> {

    private JFrame frmTaschenrechner;
    private JTextField textField;
    private JButton btn7;
    private JButton btn8;

    double firstnum;
    double secondnum;
    double result;
    String operations;
    String answer;

   
   
    /**
     * Launch the application.
     */

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Taschenrechner01 window = new Taschenrechner01();
                    window.frmTaschenrechner.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Taschenrechner01() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frmTaschenrechner = new JFrame();
        frmTaschenrechner.setTitle("Taschenrechner");
        frmTaschenrechner.setResizable(false);
        frmTaschenrechner.setBounds(100, 100, 302, 362);
        frmTaschenrechner.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmTaschenrechner.getContentPane().setLayout(null);
       
        textField = new JTextField();
        textField.setBounds(10, 11, 162, 35);
        textField.setHorizontalAlignment(SwingConstants.RIGHT);
        frmTaschenrechner.getContentPane().add(textField);
        textField.setColumns(10);
       
       
       
       
       
       
       
        //--------------------------------------------Z1 \uF0E7
       
       
                JButton    btnBackspace = new JButton("<");
                btnBackspace.setBounds(10, 56, 50, 50);
                btnBackspace.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                       
                        String backspace=null;
                       
                        if(textField.getText().length() > 0) {
                        StringBuilder strb = new StringBuilder (textField.getText());
                        strb.deleteCharAt(textField.getText().length() - 1);
                        backspace = strb.toString();
                        textField.setText(backspace);
                        }
                       
                       
                       
                       
                       
                    }
                });
                btnBackspace.setFont(new Font("Tahoma", Font.PLAIN, 18));
                frmTaschenrechner.getContentPane().add(btnBackspace);
               
                JButton    btnclear = new JButton("C");
                btnclear.setBounds(66, 56, 50, 50);
                btnclear.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                       
                       
                        textField.setText(null);
                    }
                });
                btnclear.setFont(new Font("Tahoma", Font.PLAIN, 18));
                frmTaschenrechner.getContentPane().add(btnclear);
               
               
               
                JButton    btnper = new JButton("%");
                btnper.setBounds(122, 56, 50, 50);
                btnper.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                       
                       
                        firstnum = Double.parseDouble(textField.getText());
                        textField.setText("");
                        operations = "%" ;
                    }
                });
                btnper.setFont(new Font("Tahoma", Font.PLAIN, 18));
                frmTaschenrechner.getContentPane().add(btnper);
               
               
                JButton    btnPlus = new JButton("+");
                btnPlus.setBounds(178, 222, 50, 50);
                btnPlus.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                       
                        firstnum = Double.parseDouble(textField.getText());
                        textField.setText("");
                        operations = "+" ;
                    }
                });
                btnPlus.setFont(new Font("Tahoma", Font.PLAIN, 18));
                frmTaschenrechner.getContentPane().add(btnPlus);
       
       
        //-----------------------------------------Z2
        JButton    btn7 = new JButton("7");
        btn7.setBounds(10, 110, 50, 50);
        btn7.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
           
            String EnterNumber = textField.getText() + btn7.getText();
            textField.setText(EnterNumber );
            }
        });
        btn7.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn7);
       
        JButton    btn8 = new JButton("8");
        btn8.setBounds(66, 110, 50, 50);
        btn8.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               
                String EnterNumber = textField.getText() + btn8.getText();
                textField.setText(EnterNumber );
            }
        });
        btn8.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn8);
       
       
       
        JButton    btn9 = new JButton("9");
        btn9.setBounds(122, 110, 50, 50);
        btn9.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               
                String EnterNumber = textField.getText() + btn9.getText();
                textField.setText(EnterNumber );
            }
        });
        btn9.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn9);
       
        JButton    btnsub = new JButton("-");
        btnsub.setBounds(238, 222, 50, 50);
        btnsub.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               
                firstnum = Double.parseDouble(textField.getText());
                textField.setText("");
                operations = "-" ;
            }
        });
        btnsub.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btnsub);
       
        //----------------------------------Z3
           
        JButton    btn4 = new JButton("4");
        btn4.setBounds(10, 166, 50, 50);
        btn4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
           
                String EnterNumber = textField.getText() + btn4.getText();
                textField.setText(EnterNumber );
           
            }
           
           
        });
        btn4.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn4);
       
        JButton    btn5 = new JButton("5");
        btn5.setBounds(66, 166, 50, 50);
        btn5.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
           
                String EnterNumber = textField.getText() + btn5.getText();
                textField.setText(EnterNumber );
            }
        });
        btn5.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn5);
       
       
       
        JButton    btn6 = new JButton("6");
        btn6.setBounds(122, 166, 50, 50);
        btn6.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               
                String EnterNumber = textField.getText() + btn6.getText();
                textField.setText(EnterNumber );
            }
        });
        btn6.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn6);
       
        JButton    btnMult = new JButton("*");
        btnMult.setBounds(178, 166, 50, 50);
        btnMult.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               
                firstnum = Double.parseDouble(textField.getText());
                textField.setText("");
                operations = "*" ;
            }
        });
        btnMult.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btnMult);
       
    //--------------------------------------------Z4
   
   
        JButton    btn1 = new JButton("1");
        btn1.setBounds(10, 222, 50, 50);
        btn1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn1.getText();
                textField.setText(EnterNumber );
           
               
            }
        });
        btn1.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn1);
       
        JButton    btn2 = new JButton("2");
        btn2.setBounds(66, 222, 50, 50);
        btn2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn2.getText();
                textField.setText(EnterNumber );
            }
        });
        btn2.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn2);
       
       
       
        JButton    btn3 = new JButton("3");
        btn3.setBounds(122, 222, 50, 50);
        btn3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               
                String EnterNumber = textField.getText() + btn3.getText();
                textField.setText(EnterNumber );
            }
        });
        btn3.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btn3);
       
        JButton    btndiv = new JButton("÷");
        btndiv.setBounds(238, 166, 50, 50);
        btndiv.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                firstnum = Double.parseDouble(textField.getText());
                textField.setText("");
                operations = "/" ;
            }
        });
        btndiv.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frmTaschenrechner.getContentPane().add(btndiv);
   
   
        //--------------------------------------------Z5
       
       
                JButton    btn0 = new JButton("0");
                btn0.setBounds(10, 278, 106, 50);
                btn0.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                       
                        String EnterNumber = textField.getText() + btn0.getText();
                        textField.setText(EnterNumber );
                    }
                });
                btn0.setFont(new Font("Tahoma", Font.PLAIN, 18));
                frmTaschenrechner.getContentPane().add(btn0);
               
                JButton    btnDot = new JButton(".");
                btnDot.setBounds(122, 278, 50, 50);
                btnDot.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                       
                        String EnterNumber = textField.getText() + btnDot.getText();
                        textField.setText(EnterNumber );
                       
                    }
                });
                btnDot.setFont(new Font("Tahoma", Font.PLAIN, 18));
                frmTaschenrechner.getContentPane().add(btnDot);
               
               
               
                JButton    btnun = new JButton("\u00B1");
                btnun.setBounds(238, 278, 50, 50);
                btnun.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                       
                        double ops = Double.parseDouble(String.valueOf(textField.getText()));
                        ops =ops * (-1);
                        textField.setText(String.valueOf(ops));
                    }
                });
                btnun.setFont(new Font("Tahoma", Font.PLAIN, 18));
                frmTaschenrechner.getContentPane().add(btnun);
               
                JButton    btnEqual = new JButton("=");
                btnEqual.setBounds(178, 278, 50, 50);
                btnEqual.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                       
                        String answer;
                        secondnum = Double.parseDouble(textField.getText());
                        if (operations == "+")
                        {
                            result = firstnum + secondnum;
                            answer = String.format("%.2f",result);
                            textField.setText(answer);
                           
                        }
                        else if (operations == "-")
                        {
                            result = firstnum - secondnum;
                            answer = String.format("%.2f", result);
                            textField.setText(answer);
                        }
                       
                       
                       
                        else if (operations == "*")
                        {
                            result = firstnum * secondnum;
                            answer = String.format("%.2f", result);
                            textField.setText(answer);
                        }
                       
                       
                        else if (operations == "/")
                        {
                            result = firstnum / secondnum;
                            answer = String.format("%.2f", result);
                            textField.setText(answer);
                        }
                       
   
                       
                       
                       
                       
                       
                    }
               
                });
                btnEqual.setFont(new Font("Tahoma", Font.PLAIN, 18));
                frmTaschenrechner.getContentPane().add(btnEqual);
       
               
               
                       
        //--------------------------------------------Z6
       

    }
}


edit: ich benutz Application Window
 

Robat

Top Contributor
Also erstmal vergleicht man in Java Strings inhaltlich mit equals und nicht mit ==
if(operations == "+") { .. } wird also zu if(operations.equals("+"){ .. }.
Weiterhin seh ich in deinem Code keinerlei Ansätze. Was hast du / ihr denn bereits versucht?
 

Blender3D

Top Contributor
daher bitte ich euch mir den richtigen denkanstoß oder die reine rechen formel zu schreiben damit ich sie dann meinen taschenrechner hinzugeben kann
Bevor Du weitere Funktionen zu deinem Rechner hinzufügst, solltest Du Dein momentanes Konzept überdenken.
Für die Anzeige verwendest Du ein JTextfield in das man momentan jede beliebige Eingabe machen kann. Besser ist hier z.B. ein JLabel, da die Eingaben über die Buttons gemacht werden.
Du unterstützt eine adhoc Operation mit 2 Operanden. Spätestens wenn es um Klammerrechnung geht wirst Du damit Probleme bekommen. z.B. (3+4) x 7 ist so nicht machbar. In meiner Studienzeit hatten wir auch einmal einen Taschenrechner als Projekt.
Wir haben zuerst unser Rechenwerk ohne GUI gemacht und uns auf die Logik und die Probleme eines Taschenrechners konzentriert ( Priorität von Operationen und Klammern, Überlauf, Rechengenauigkeit und Tests usw. ) . Die GUI kam im Anschluss.
 
K

kneitzel

Gast
Also mich würde interessieren, was ihr denn bei 1/x erwartet? Was soll denn da genau passieren?

Ansonsten gab es schon einige gute Antworteten, über die es sich auch lohnt, nachzudenken.
 
K

kneitzel

Gast
Genauer. Versuch zu bestimmen, was wo sein soll.... wann soll der Knopf gedrückt werden können u.s.w.

Also die Anzeige soll nach dem der Knopf gedrückt wurde 1/Anzeigewert enthalten. Wäre eine erste Aussage.

Nur durch das verfeinern und durchspielen mit Stift und Papier bekommst du eine genaue Vorstellung.
 

Rigan

Mitglied
Genauer. Versuch zu bestimmen, was wo sein soll.... wann soll der Knopf gedrückt werden können u.s.w.

Also die Anzeige soll nach dem der Knopf gedrückt wurde 1/Anzeigewert enthalten. Wäre eine erste Aussage.

Nur durch das verfeinern und durchspielen mit Stift und Papier bekommst du eine genaue Vorstellung.
Kann mir vorstellen der Chef will hier sicher noch viel schlimmere Dinge haben.
Lange ist es her, da hatte ich mal ein Fach Mathematik. Da lernte ich sowas wie Punkt vor Strich, Klammerung, ..... Aber auch was von Rechengenauigkeit. Und wenn ich in diesem Modus bin, dann komme ich um die "Klasse Bruch" nicht vorbei. Und ist "1/X" nicht ein Bruch? Bruchrechnen wird in der Schule 5. Klasse durchgenommen. Ok, kommt denke ich aufs Bundesland an.
Was soll eine Taste 1/X tun? Am besten einen echten Taschenrechner nehmen und ausprobieren, was da so passiert. Bei meinem beachtet er Punkt vor Strich und nimmt den Kehrwert von dem Teil, dass eingegeben wurde.
7+8<1/X> = 7,125
(7+8)<1/X> = 0,06666666667
0<1/X> = oha, da war doch irgend so ne blöde Regel ;)
2*(7-7)<1/X> = muss du abfangen
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Kann mir vorstellen der Chef will hier sicher noch viel schlimmere Dinge haben.
Lange ist es her, da hatte ich mal ein Fach Mathematik. Da lernte ich sowas wie Punkt vor Strich, Klammerung, ..... Aber auch was von Rechengenauigkeit. Und wenn ich in diesem Modus bin, dann komme ich um die "Klasse Bruch" nicht vorbei. Und ist "1/X" nicht ein Bruch? Bruchrechnen wird in der Schule 5. Klasse durchgenommen. Ok, kommt denke ich aufs Bundesland an.
Was soll eine Taste 1/X tun? Am besten einen echten Taschenrechner nehmen und ausprobieren, was da so passiert. Bei meinem beachtet er Punkt vor Strich und nimmt den Kehrwert von dem Teil, dass eingegeben wurde.
7+8<1/X> = 7,125
(7+8)<1/X> = 0,06666666667
0<1/X> = oha, da war doch irgend so ne blöde Regel ;)
2*(7-7)<1/X> = muss du abfangen
Also ich kann Dir nicht folgen. Für eine ganz einfachen Taschenrechner braucht man natürlich keine Brüche und da hat man keine Klammern. Hat den Vorteil, dass man auch kaum über Prioritäten nachdenken muss, denn es gibt keine zwei Operationen, die bewertet werden müssten.

Die Idee ist dabei tatsächlich, dass man einfach nur eine Zahl merken muss und die Operationen dann wie folgt aussehen:
- Ziffern werden einfach hinzu gefügt zur Zahl im Display. Ggf. merken, ob man in einem Eingabemodus ist oder nicht.)
- Bei Dualen Operationen (also wo zwei Operanden benötigt werden), wird geprüft, ob bereits eine Zahl gemerkt wurde. Wenn dies der Fall war, dann wird die Operation ausgeführt mit gemerkter Zahl und Zahl im Display. Die gemerkte Zahl wird gelöscht und das Ergebnis kommt ins Display.
- Bei Operationen mit nur einem Operanden, wird diese Operation direkt auf die Zahl im Display angewendet.

Und genau so eine Ausführung hätte ich vom TE erwartet. Das reine Mathe Wissen nützt nun einmal nichts, wenn man Aufgaben nicht richtig versteht und durchschaut. Und auf nichts anderes wollte ich hinaus, Aber nett, dass da jemand um die Ecke kommt und auf diese Art und Weise antwortet.
 

Rigan

Mitglied
Also ich kann Dir nicht folgen. Für eine ganz einfachen Taschenrechner braucht man natürlich keine Brüche und da hat man keine Klammern. Hat den Vorteil, dass man auch kaum über Prioritäten nachdenken muss, denn es gibt keine zwei Operationen, die bewertet werden müssten.

Die Idee ist dabei tatsächlich, dass man einfach nur eine Zahl merken muss und die Operationen dann wie folgt aussehen:
- Ziffern werden einfach hinzu gefügt zur Zahl im Display. Ggf. merken, ob man in einem Eingabemodus ist oder nicht.)
- Bei Dualen Operationen (also wo zwei Operanden benötigt werden), wird geprüft, ob bereits eine Zahl gemerkt wurde. Wenn dies der Fall war, dann wird die Operation ausgeführt mit gemerkter Zahl und Zahl im Display. Die gemerkte Zahl wird gelöscht und das Ergebnis kommt ins Display.
- Bei Operationen mit nur einem Operanden, wird diese Operation direkt auf die Zahl im Display angewendet.

Und genau so eine Ausführung hätte ich vom TE erwartet. Das reine Mathe Wissen nützt nun einmal nichts, wenn man Aufgaben nicht richtig versteht und durchschaut. Und auf nichts anderes wollte ich hinaus, Aber nett, dass da jemand um die Ecke kommt und auf diese Art und Weise antwortet.

Da muss ich dir Widersprechen
+ Jeder Taschenrechner sollte Punkt Vor Strich beachten. Wenn dem nicht so ist, dann sorry, ist es kein Taschenrechner.
+ Das mit den Bruch war ein Denkanstoss. Warum? Sollte der Wert 0 übergeben werden, so muss dies abgefangen werden. Warum? Da man durch null nicht teilen darf. Dies ist hier sehr wichtig, da es sonst zu einem Programmabsturz kommt. Dabei ist es sogar egal, ob der Taschenrechner nun Punkt vor Strich beachtet oder nicht.
+ Die Klasse Bruch war damals die Klasse an der ich Klassen und Überladungen gelernt habe. Deshalb auch mein Vorschlag in die Richtung.
+ Jede Geteilt - Aufgabe kann eben auch als Bruch gesehen werden. Und 1/X heißt nur, dass ich Zähler und Nenner tausche.
 
K

kneitzel

Gast
Du kennst die ganz einfachen Taschenrechner ganz offensichtlich nicht. Lies, was ich geschrieben habe, dann verstehst du, was ein ganz einfacher Taschenrechner ist und wie dieser funktioniert.

Es geht eben explizit nicht um die Auswertung komplexer Ausdrücke, welche Berechnungen darstellen.
 

Rigan

Mitglied
Ok, die kenne ich wirklich nicht
Du kennst die ganz einfachen Taschenrechner ganz offensichtlich nicht. Lies, was ich geschrieben habe, dann verstehst du, was ein ganz einfacher Taschenrechner ist und wie dieser funktioniert.

Es geht eben explizit nicht um die Auswertung komplexer Ausdrücke, welche Berechnungen darstellen.
Ok, die kenn ich wirklich nicht:D

Was ich hier unseren TE versuche klar zu machen ist, dass er mit einbauen muss, dass keine 0 übergeben wird. Sprich wenn die Funktion aufgerufen wird, dass zuerst geprüft werden muss ob die übergebene Zahl ein 0 ist. Sollte dies eben nicht passieren und eine 0 übergeben werden, so kommt es zum Programmabsturz. Auch ein Taschenrechner gibt dann --E-- aus. Denke selbst der einfachste.
mMn geht es darum in der Lektion, die der Chef/Dozent hier vermitteln möchte.

;)übrigens sollte dies auch bei der normalen geteilt Funktion beachtet werden ;)
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Liegt evtl. an der technischen Entwicklung der letzten 30-40 Jahre. Ich kenne noch kleine Taschenrechner, die tatsächlich nicht mehr konnten.

Mit den anderen Punkten hast Du auch Recht, wobei das evtl, als zweiter Schritt kommt: beim Testen in den Fehler laufen und dann schauen, wie man das raus bekommt.

Ist übrigens sehr interessant. Wenn man einen komplexen Taschenrechner möchte, dann wird das relativ komplex, entsprechende Auswerte-Bäume zu bauen. Das haben wir damals zuerst relativ einfach mit der Postfix Notation gemacht. Da hat man dann kein Punkt vor Strich mehr sondern kann einen Ausdruck von Links nach Rechts auswerten mit einem Stack. Das war damals aber Schulniveau - für komplexeres war die Zeit zu eng bemessen.

Also postfix heisst: Operatoren kommen ans Ende. 3 5 + wäre also in ‚infix‘ Schreibweise 3+5. Und Auswertung ist trivial: Zahlen kommen auf den Stack, Operatoren nehmen sich die Anzahl Zahlen, die sie brauchen, vom Stack und legen das Ergebnis wieder auf den Stack.

Das einfach mal als ein Schmankerl aus meiner Jugend. Und sorry, hab evtl. zuerst etwas überreagiert, weil ich deine Hinweise etwas falsch interpretiert hatte.
 

Rigan

Mitglied
Steht für den Kehrwert.
Kehrwert von X Definition: X * Kehrwert von X = 1-> Kehrwert von X = 1/X ;)
Mir ist das klar, hatte da auch nie Probleme. :D
Ich wollte hier nur dem TE klar machen was er zu beachten hat. Da eben bei 1/x, und X=0 einen Programmabsturz verursacht. Wer sich den Code unseres TE anschaut, der sieht, dass er dies eben auch beim normalen geteilt Rechnen nicht abgefangen hat.

Java:
                        else if (operations == "/")
                        {
                            result = firstnum / secondnum;
                            answer = String.format("%.2f", result);
                            textField.setText(answer);
                        }
was passiert wenn secundnum den Wert 0 enthält?
Wenn er also dann
Code:
 result= 1 / firstnum
schreibt, dann darf eben firstnum nicht 0 enthalten, da es eben sonst zum Programmabsturz kommt. Hier sollte eben dann der Fehler abgefangen werden und sowas wie "---E---" ausgegeben werden.

Schreibe ich echt so schlimm, dass es nicht zu verstehen ist?:oops:
 

Rigan

Mitglied
Das andere was ich gemeint habe mit der Klasse Bruch, da geht es eben um Genauigkeit
Wenn ich rechne 2/3 - 1/3 - 1/3 =
muss und sollte 0 raus kommen. Gebt es mal in einen kleinen Programm ein, dann seht ihr, dass es aber nicht so gerechnet wird. Warum?
2/3 = 0,666666666666666666..7
1/3 = 0,333333333333333333..3
das ist simple Mathematik. Einfache Rundung, dass wir alle gelernt haben.
Wenn ich jetzt rechne
1/3 + 1/3 = 0,666666666666666..6
Ihr habt einen Rundungsfehler. Dies kann ich eben nur vermeiden, wenn ich bis zum Schluss eben mit Brüchen rechne und erst dort, wenn erwünscht, in eine Kommazahl umwandle. Ich arbeite also mit Integer für Zähler und Nenner. Da kann ich eben auch direkt vergleichen, ob eine 0 übergeben wird.
Uns, als Programmierer ist das klar. Ihr habt es aber mit einer dummen Maschine zu tun.
Und die sieht nur 0,666666666666..6 == 0,666666666666..7
2/3 - 1/3 - 1/3 == 0 ist false wenn es eben mit Dezimalzahlen gerechnet wird.
Hier wäre eben dann der Kehrwert theoretisch möglich. Aber was ist der Kehrwert von 0,000000000000..1 ? Bekomme ich da nicht einen Overflow Fehler? Ich suche mich dann dumm und dämlich, da ich den Fehler nicht nachvollziehen kann. Da ich als Mensch hier eben eine 0 sehe und keine 0,.......1
mMn ist das eine sehr wichtige Lektion, die jeder Programmierer, egal in welcher Sprache er zuhause ist lernen muss. Vermeidet unsauberen Code. Geht nicht von euch aus, geht davon aus dass ihr eine dumme Maschine vor euch habt.

In der Zusammenfassung:
spätestens wenn ich mit Kehrwert <1/X> arbeite sollte ich anfangen die Klasse Bruch, mit den Variablen Zähler und Nenner, aufbauen. Ich muss die Variablen aber auch private machen, da niemand die Möglichkeit haben darf direkt die 0 im Nenner abzuspeichern. Ich muss mir Gedanken über Methoden machen, dann Konstruktor und Überladungen. Für mich ist eben die Klasse Bruch auch die beste Variante jemanden den Sinn von Klassen zu erklären und ich kann nach und nach die Klasse vergrößern, also mehr Methoden einbauen. Als Beispiel wäre hier dann auch die Methode kürzen, die ich ebenfalls private erkläre.

Sorry, wenn ich das anders sehe. Alles andere wäre hier einfach unsauberer Code.
 

mihe7

Top Contributor
@Rigan Während ich Dir im Prinzip zustimme (Genauigkeit), muss man hier abwägen.

Wenn man es genau nimmt, ist Deine Erklärung nämlich auch nicht richtig, weil gerade nicht im Dezimalsystem gearbeitet wird. Die Ungenauigkeit stammt einfach daher, dass sich bestimmte Dezimalzahlen binär nicht exakt darstellen lassen (zumindest nicht mit einer Gleitkommazahl). Das gilt z. B. auch für 0.1:
Java:
public class Test {
    public static void main(String[] args) {
        System.out.println(0.1 + 0.1 + 0.1 == 0.3);
    }
}
Der Taschenrechner rechnet somit schon bei der Addition "falsch". Das Problem an der Sache ist: will man die Sache richtig und mit allen Konsequenzen erklären, muss man relativ tief in die Materie einsteigen; das würde in meinen Augen viel zu weit für ein "Einsteigerproblem" wie einen simplen Taschenrechner führen.
 

Peat

Mitglied
ich bedanke mich für all die antworten!
ich entschuldige mich das ich erst jetzt zum Thema antworte
ja ich hab sehr mangelndes basis wissen^^ bin daher auch von den meisten überfordert gewesen was hier beschrieben wurde
ich denk ich werd versuchen das iwie zu implizieren

Kehrwert von X Definition: X * Kehrwert von X = 1-> Kehrwert von X = 1/X
 
K

kneitzel

Gast
Wenn Du eine Antwort nicht verstanden hast, kannst Du da auch gerne nachhaken. So ein Forum ist natürlich nicht so gut, wie ein direktes Gespräch, aber mit etwas hin und her kriegen wir das eine oder andere bestimmt noch besser erläutert.
 

Peat

Mitglied
Vielen dank, aber ich hab leider zu wenig ahnung dafür ^^
Könnte aber auch ein ts anbieten für Gespräche was aber glaub relativ nutzlos sein wird ^^
Ich werde versuchen ihn neu zu programmieren aber auf das einfachste den focus legen und dann iwie versuchen weiter. Funktioniert zu implizieren
 

mihe7

Top Contributor
Vielen dank, aber ich hab leider zu wenig ahnung dafür ^^
Vergiss einfach die ganzen Kommentare bzgl. Kehrwert. Worum es @kneitzel anfangs vermutlich ging, war einfach die Frage, was beim Drücken auf die 1/x-Taste passieren soll. Sprich: soll der Kehrwert der Zahl, die gerade im Display steht, genommen werden oder soll zuerst das Ergebnis berechnet und davon der Kehrwert gebildet werden.
 

Peat

Mitglied
Vergiss einfach die ganzen Kommentare bzgl. Kehrwert. Worum es @kneitzel anfangs vermutlich ging, war einfach die Frage, was beim Drücken auf die 1/x-Taste passieren soll. Sprich: soll der Kehrwert der Zahl, die gerade im Display steht, genommen werden oder soll zuerst das Ergebnis berechnet und davon der Kehrwert gebildet werden.
Das erste : der kehrwert der Zahl dir in display steht soll genommen werden
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Erste Schritte Brauche Hilfe bei einem Java-Taschenrechner Java Basics - Anfänger-Themen 11
S Java-Taschenrechner. Hilfe Java Basics - Anfänger-Themen 10
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
R Java Bücher hilfe Java Basics - Anfänger-Themen 9
Lacotto Java Kurs Aufgaben Hilfe Java Basics - Anfänger-Themen 14
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
josfe1234 Hilfe access denied ("java.io.FilePermission" " " "read") Java Basics - Anfänger-Themen 12
G Java Hilfe Java Basics - Anfänger-Themen 3
J Java List, Bitte um Hilfe Java Basics - Anfänger-Themen 15
J Java List, bitte um Hilfe Java Basics - Anfänger-Themen 3
H Brauche Hilfe in Java Eclipse Programmieraufgabe Neuling Java Basics - Anfänger-Themen 3
R Java (Eclipse) "Lagerverwaltung" HILFE Java Basics - Anfänger-Themen 13
Gaudimagspam Dringend Java Hilfe benötigt Java Basics - Anfänger-Themen 19
A Hilfe bei Java Projekt Java Basics - Anfänger-Themen 4
K Java Projekt Hilfe Java Basics - Anfänger-Themen 5
S Ein Java Anfänger braucht Hilfe Java Basics - Anfänger-Themen 5
S Brauche hilfe in Java [Fehler in mein Code]? Java Basics - Anfänger-Themen 2
S Unbedingte hilfe bei Java Aufgabe [Schleife / Zinsrechnung] Java Basics - Anfänger-Themen 14
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
S Hilfe bei Java Aufgabe (Schleifen) Java Basics - Anfänger-Themen 25
S Ein- Ausgaben Java [Hilfe] Java Basics - Anfänger-Themen 3
Z Hilfe, Summenformel in Java Java Basics - Anfänger-Themen 15
R Spielfeldbegrenzung einfügen (Java)? Brauche Hilfe! Java Basics - Anfänger-Themen 15
V Erste Schritte Hilfe gesucht beim einstieg in Java und erste Aufgaben aus der Berufsschule Java Basics - Anfänger-Themen 9
C Brauche dringend Hilfe. Umfrage mit ja und nein in Java erstellen? Java Basics - Anfänger-Themen 12
B Hilfe bei eine Java-Methode Java Basics - Anfänger-Themen 4
V Erste Schritte Java-Anfänger braucht Hilfe bei Arrays Java Basics - Anfänger-Themen 19
B Brauch Hilfe für Java Programm Java Basics - Anfänger-Themen 12
F Java Collectors Game Hilfe Java Basics - Anfänger-Themen 4
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Hilfe!!! java.lang.ClassCastException Java Basics - Anfänger-Themen 1
K Suche Hilfe bei einfachem Java Code ( Debuggen ) Java Basics - Anfänger-Themen 1
A Java Hilfe Java Basics - Anfänger-Themen 0
T Java Code Hilfe - public void xxx() Java Basics - Anfänger-Themen 2
A HILFE in Java Matrizzen einbauen mit *Bezahlung!* Java Basics - Anfänger-Themen 1
P Java mit BlueJ - Hilfe - Gegenstände Java Basics - Anfänger-Themen 10
N Java Hilfe Java Basics - Anfänger-Themen 5
X Erste Schritte Hilfe bei Java Java Basics - Anfänger-Themen 2
H Java von Kopf bis Fuß: Brauche Hilfe Java Basics - Anfänger-Themen 6
B Java Objektorientierte Datenbank - Assoziation Hilfe Java Basics - Anfänger-Themen 4
N Java Scanner HILFE :D Java Basics - Anfänger-Themen 9
F Java-Anfänger, brauche Hilfe Java Basics - Anfänger-Themen 3
F Java-Anfänger, brauche Hilfe Java Basics - Anfänger-Themen 2
D Hilfe zu Java Befehl In.open Java Basics - Anfänger-Themen 2
X Methoden Java Dublikatsuche Hilfe(BlueJ) Java Basics - Anfänger-Themen 9
D hilfe zu Java Scrollpane Java Basics - Anfänger-Themen 4
K Hilfe, komme nicht weiter in meinem JAVA-Spiel Java Basics - Anfänger-Themen 3
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
S ICh brauche Hilfe,weil Java in der Schule Java Basics - Anfänger-Themen 11
V Ganz kurze Java-Hilfe - Ich finde meinen Fehler nicht Java Basics - Anfänger-Themen 4
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
C Java Felder bearbeiten Hilfe Java Basics - Anfänger-Themen 4
xDarkSunx Java Chat Hilfe Java Basics - Anfänger-Themen 9
B Java und Javac funktionieren nicht - bitte hilfe Java Basics - Anfänger-Themen 5
Jats Hilfe bei Texausgabe mit Java Java Basics - Anfänger-Themen 16
S Java problem, bitte um hilfe! Java Basics - Anfänger-Themen 9
M Hilfe bei Java-Aufgabe Java Basics - Anfänger-Themen 15
F hilfe!!!! java weg Java Basics - Anfänger-Themen 3
B Exception in thread "main" java.lang.NullPointerException Fehler Hilfe! Java Basics - Anfänger-Themen 4
J Java Rekursiv vs(zu) Iterativ Hilfe Java Basics - Anfänger-Themen 3
D Java Problem bitte um hilfe Java Basics - Anfänger-Themen 4
S Hilfe - java.lang.RuntimeException: Uncompilable source code - incompatible types Java Basics - Anfänger-Themen 10
S Hilfe bei Java Programm Java Basics - Anfänger-Themen 2
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
S BITTE UM HILFE HASHTABLE/import java.util.Hashtable in Ecplipse Java Basics - Anfänger-Themen 12
L Wichtig! Benötige Hilfe bei Java! Java Basics - Anfänger-Themen 6
H Hilfe bei Java Code Java Basics - Anfänger-Themen 3
G ein kleines java prog - hat aber einen fehler-bitte um hilfe Java Basics - Anfänger-Themen 5
M Java Rätsel (Geocaching) - Brauch Hilfe dazu! Java Basics - Anfänger-Themen 15
G Hilfe bei GUI für Java Programm erstellen Java Basics - Anfänger-Themen 2
N Brauche dringende Hilfe Java Aplett läuft nicht! Java Basics - Anfänger-Themen 3
G Hilfe (in HTML) in Java-Programm implementieren Java Basics - Anfänger-Themen 4
S Hilfe bei einem Java-Anfängerprogramm. Java Basics - Anfänger-Themen 10
P JAVA Hilfe Java Basics - Anfänger-Themen 2
M Java Test Übungsfragen Hilfe! Java Basics - Anfänger-Themen 5
F Kann nicht mal java richtig downloaden.HILFE Java Basics - Anfänger-Themen 3
S Blutiger Java Anfänger braucht dringend Hilfe Java Basics - Anfänger-Themen 4
V DLL mit Java HILFE Java Basics - Anfänger-Themen 10
L Hilfe mit java prog Java Basics - Anfänger-Themen 11
I Hilfe beim Java-Applet Beispiel Java Basics - Anfänger-Themen 27
G Java-Noobaufgabe HILFE Java Basics - Anfänger-Themen 8
S SQL und Java Hilfe Java Basics - Anfänger-Themen 3
G hilfe! zusätzliche java bibliothek einbinden Java Basics - Anfänger-Themen 3
J Java-Chat geht nicht | Brauche dringent hilfe! Java Basics - Anfänger-Themen 3
M Hilfe bei Java-Klasse Java Basics - Anfänger-Themen 3
J Hilfe Java Hausaufgabe kommt nicht weiter Java Basics - Anfänger-Themen 5
M Meine Java Programm hägt durch waitFor() ! HILFE! Java Basics - Anfänger-Themen 10
M Brauche hilfe bei Java Applikation Java Basics - Anfänger-Themen 8
C Hilfe bei kleinem java programm Java Basics - Anfänger-Themen 4
K Hilfe bei Java-Applikation zur Erfassung von IT-Nachrichten Java Basics - Anfänger-Themen 8
L Kompletter Neuling: Hilfe beim ersten Java Versuchen Java Basics - Anfänger-Themen 12
D Java Aufgabe fürs Studium (bitte um Hilfe) Java Basics - Anfänger-Themen 8
F Fehler im Java Code, hilfe? Java Basics - Anfänger-Themen 9
B zeus und java !!!brauche dringend hilfe!!! Java Basics - Anfänger-Themen 29
M Hilfe bei einem einfachen Java-Programm Java Basics - Anfänger-Themen 41
A Hilfe beim Java-Einstieg Java Basics - Anfänger-Themen 3
N Hilfe!! xml + java Java Basics - Anfänger-Themen 3
M Java und Applets (Hilfe!!!) Java Basics - Anfänger-Themen 5
B Kann Java nicht installieren Hilfe Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben