Bruchrechner

Diskutiere Bruchrechner im Allgemeine Java-Themen Forum; Hi, ich möchte einen Bruchrechner programmieren meine Gui und die Logik für das Plus rechnen stehen schon. Ich hab nur 2 Probleme. Problem 1: beim...

  1. MaxG.
    MaxG. Mitglied
    Hi,
    ich möchte einen Bruchrechner programmieren meine Gui und die Logik für das Plus rechnen stehen schon. Ich hab nur 2 Probleme. Problem 1: beim Löschen der Eingabe wird aus einem Textfeld nichts rausgelöscht, dazu meine Frage: Was habe ich da Falsch gemacht? Problem 2: beim plus rechnen mit 2 unterschiedlichen Nennern kommt die Fehlermeldung: java.lang.OutOfMemoryError, hierzu meine Frage Wie kommst dazu und wie kann ich es beheben??

    hier noch mein Code
    Code (Java):
    package RunProject;

    import Core.Listener;
    import Gui.MainFrame;

    public class ShowGui {

        public static void main(String[] args) {    
            MainFrame frame = new MainFrame();
            frame.showFrame();    
         
            Listener listener = new Listener(frame);
            listener.getAction();
        }
    }
    Code (Java):
    package Gui;

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.GridLayout;
    import java.text.NumberFormat;

    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFormattedTextField;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.border.Border;
    import javax.swing.text.NumberFormatter;

    public class MainFrame extends JFrame{

        public JPanel eingabeContainer;
        public JPanel eingabeController;
        public JPanel bruch1;
        public JPanel operator;
        public JPanel bruch2;
        public JPanel panelIstGleich;
        public JPanel ergebnis;
        public JPanel buttonsContainer;
        public JPanel operatoren;
        public JPanel panelClear;
     
        public JButton buttonPlus;
        public JButton buttonMinus;
        public JButton buttonMal;
        public JButton buttonGeteilt;
        public JButton buttonClear;
        public JButton buttonIstgleich;
     
        public JFormattedTextField zähler1;
        public JFormattedTextField nenner1;
        public JFormattedTextField zähler2;
        public JFormattedTextField nenner2;
        public JLabel zählerErgebnis;
        public JLabel nennerErgebnis;
     
        public JLabel operatorLabel;
        public JLabel labelIstGleich;
     
        public MainFrame(){
            this.setTitle("Bruchrechner");
            this.setSize(450,200);
            this.setLayout(new BorderLayout());
         
            NumberFormat format = NumberFormat.getInstance();
            format.setGroupingUsed(false);
            NumberFormatter formatter = new NumberFormatter(format);
            formatter.setAllowsInvalid(false);
         
            Border border = BorderFactory.createLineBorder(Color.BLACK, 1);
         
            eingabeContainer = new JPanel();
         
            eingabeController = new JPanel();
            eingabeController.setLayout(new GridLayout(1,5));
         
            bruch1 = new JPanel();
            bruch1.setLayout(new GridLayout(2,1,2,2));
         
            zähler1 = new JFormattedTextField(formatter);
            nenner1 = new JFormattedTextField(formatter);
            zähler1.setColumns(5);
            nenner1.setColumns(5);
            zähler1.setBorder(border);
            nenner1.setBorder(border);
         
            bruch1.add(zähler1);
            bruch1.add(nenner1);
         
         
            bruch2 = new JPanel();
            bruch2.setLayout(new GridLayout(2,1,2,2));
         
            zähler2 = new JFormattedTextField(formatter);
            nenner2 = new JFormattedTextField(formatter);
            zähler2.setColumns(5);
            nenner2.setColumns(5);
            zähler2.setBorder(border);
            nenner2.setBorder(border);
         
            bruch2.add(zähler2);
            bruch2.add(nenner2);
         
         
            operator = new JPanel();
         
            operatorLabel = new JLabel();
            operator.add(operatorLabel);
         
         
            panelIstGleich = new JPanel();
         
            labelIstGleich = new JLabel("=");
            panelIstGleich.add(labelIstGleich);
         
         
            ergebnis = new JPanel();
            ergebnis.setLayout(new GridLayout(2,1,2,2));
            nennerErgebnis = new JLabel();
            zählerErgebnis = new JLabel();
            nennerErgebnis.setBackground(Color.WHITE);
            nennerErgebnis.setOpaque(true);
            nennerErgebnis.setBorder(border);
            zählerErgebnis.setBackground(Color.WHITE);
            zählerErgebnis.setOpaque(true);
            zählerErgebnis.setBorder(border);
         
         
            ergebnis.add(zählerErgebnis);
            ergebnis.add(nennerErgebnis);
         
            eingabeController.add(bruch1);
            eingabeController.add(operator);
            eingabeController.add(bruch2);
            eingabeController.add(panelIstGleich);
            eingabeController.add(ergebnis);
         
            eingabeContainer.add(eingabeController);
         
            buttonsContainer = new JPanel();
         
            operatoren = new JPanel();
            operatoren.setLayout(new GridLayout(2,2,5,5));
         
            buttonPlus = new JButton("+");
            buttonMinus = new JButton("-");
            buttonMal = new JButton("*");
            buttonGeteilt = new JButton("/");
         
            operatoren.add(buttonPlus);
            operatoren.add(buttonMinus);
            operatoren.add(buttonMal);
            operatoren.add(buttonGeteilt);
         
            buttonsContainer.add(operatoren);
         
         
            panelClear = new JPanel();
         
            buttonClear = new JButton("C");
            buttonIstgleich = new JButton("=");
            panelClear.add(buttonClear);
            panelClear.add(buttonIstgleich);
         
            buttonsContainer.add(operatoren);
            buttonsContainer.add(panelClear);
         
            this.add(buttonsContainer, BorderLayout.SOUTH);
            this.add(eingabeContainer, BorderLayout.CENTER);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
     
        public void showFrame(){
            this.setVisible(true);
        }
    }
    Code (Java):
    package Core;

    import java.util.ArrayList;

    public class Rechner {

       ArrayList<Integer> zahlen = new ArrayList<Integer>();

       public ArrayList<Integer> plus(int nenner1, int zähler1, int nenner2, int zähler2) {
           int nenner, zähler;

           if(nenner1 == nenner2){
               zähler = zähler1 + zähler2;
               zahlen.add(nenner1);
               zahlen.add(zähler);
           }else{
               int counter = 1;
               double nenner1Rest, nenner2Rest;
               boolean statusNenner1 = false;
               boolean statusNenner2 = false;
               boolean next = false;

               do{
                   nenner1Rest = nenner1 % counter;
                   nenner2Rest = nenner2 % counter;

                   if(nenner1Rest == 0){
                       statusNenner1 = true;
                   }
                   if(nenner2Rest == 0){
                       statusNenner2 = true;
                   }

                   if(statusNenner1 == true && statusNenner2 == true){
                       int faktorNenner1, faktorNenner2, neuerZähler1, neuerZähler2, neuerNenner1;

                       neuerNenner1 = counter;

                       faktorNenner1 = counter / zähler1;
                       faktorNenner2 = counter / zähler2;

                       neuerZähler1 = faktorNenner1 * zähler1;
                       neuerZähler2 = faktorNenner2 * zähler2;

                       zähler = neuerZähler1 + neuerZähler2;

                       zahlen.add(neuerNenner1);
                       zahlen.add(zähler);
                   }else{
                       statusNenner1 = false;
                       statusNenner2 = false;
                   }
                   counter ++;
               }while(next == false);
           }
           return zahlen;
       }

       public ArrayList<Integer> minus(int nenner1, int zähler1, int nenner2, int zähler2) {
           return zahlen;
       }

       public ArrayList<Integer> mal(int nenner1, int zähler1, int nenner2, int zähler2) {
           return zahlen;
       }

       public ArrayList<Integer> geteilt(int nenner1, int zähler1, int nenner2, int zähler2) {
           return zahlen;
       }
    }
    Code (Java):
    package Core;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;

    import Gui.MainFrame;

    public class Listener<E> {

        MainFrame frame;
        Rechner rechner = new Rechner();

        int nenner1 = 0;
        int nenner2 = 0;
        int zähler1 = 0;
        int zähler2 = 0;
     
        ArrayList<Integer> zahlen;
     
        String nenner;
        String zähler;

        public Listener(MainFrame frame) {
            this.frame = frame;
        }

        public void getAction() {
            frame.buttonPlus.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    frame.operatorLabel.setText("+");
                }
            });

            frame.buttonMinus.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    frame.operatorLabel.setText("-");
                }
            });

            frame.buttonMal.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    frame.operatorLabel.setText("*");
                }
            });

            frame.buttonGeteilt.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    frame.operatorLabel.setText("/");
                }
            });

            frame.buttonIstgleich.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    String sOperator;
                    try {
                        nenner1 = Integer.parseInt(frame.nenner1.getText());
                    } catch (NumberFormatException e) {
                        System.err.println(
                                "Fehler bei Methode getAction in Klasse Listener Ursache: Fehler beim parsen von nenner1");
                    }

                    try {
                        nenner2 = Integer.parseInt(frame.nenner2.getText());
                    } catch (NumberFormatException e) {
                        System.err.println(
                                "Fehler bei Methode getAction in Klasse Listener Ursache: Fehler beim parsen von nenner2");
                    }

                    try {
                        zähler1 = Integer.parseInt(frame.zähler1.getText());
                    } catch (NumberFormatException e) {
                        System.err.println(
                                "Fehler bei Methode getAction in Klasse Listener Ursache: Fehler beim parsen von zähler1");
                    }

                    try {
                        zähler2 = Integer.parseInt(frame.zähler2.getText());
                    } catch (NumberFormatException e) {
                        System.err.println(
                                "Fehler bei Methode getAction in Klasse Listener Ursache: Fehler beim parsen von zähler2");
                    }
                    sOperator = frame.operatorLabel.getText();

                    if (sOperator.equals("+")) {
                        zahlen = (ArrayList<Integer>) rechner.plus(nenner1, zähler1, nenner2, zähler2);
                        nenner = String.valueOf(zahlen.get(0));
                        zähler = String.valueOf(zahlen.get(1));

                        frame.nennerErgebnis.setText(nenner);
                        frame.zählerErgebnis.setText(zähler);
                    }
                    if (sOperator.equals("-")) {
                        zahlen = (ArrayList<Integer>) rechner.minus(nenner1, zähler1, nenner2, zähler2);
                        nenner = String.valueOf(zahlen.get(0));
                        zähler = String.valueOf(zahlen.get(1));

                        frame.nennerErgebnis.setText(nenner);
                        frame.zählerErgebnis.setText(zähler);
                    }

                }
            });

            frame.buttonClear.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    frame.nenner1.setText(null);
                    frame.nenner2.setText(null);
                    frame.zähler1.setText(null);
                    frame.zähler2.setText(null);
                    frame.zählerErgebnis.setText(null);
                    frame.nennerErgebnis.setText(null);
                    frame.operatorLabel.setText(null);

                }
            });
        }
    }
     
    Zuletzt von einem Moderator bearbeitet: 10. Jan. 2017
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. VfL_Freak
    VfL_Freak Bekanntes Mitglied
    Moin,

    habe jetzt den Code nur überflogen, aber auffällig ist die Endlosschleife in der Methode plus :
    Code (Java):
    do{
    // ...
    }while( next == false );
    Du setzt next nie auf true !!

    Gruß Klaus

    BTW: Umlaute in Bezeichnern sind keine gute Idee !
     
  4. MaxG.
    MaxG. Mitglied
    Danke ist mir überhaupt nicht aufgefallen
     
  5. MaxG.
    MaxG. Mitglied
    Hat noch jemand eine Antwort zu meinem Anderen Problem.
    Problem: In dem Textfeld wo der Cursor drin ist wird wenn man den Button buttonClear drückt nichts rausgelöscht woran liegt das?
     
  6. VfL_Freak
    VfL_Freak Bekanntes Mitglied
    Moin,

    Du meinst diesen Part?
    Code (Java):

    public void actionPerformed(ActionEvent arg0)
    {
        frame.nenner1.setText(null);
        frame.nenner2.setText(null);
        frame.zähler1.setText(null);
        frame.zähler2.setText(null);
        frame.zählerErgebnis.setText(null);
        frame.nennerErgebnis.setText(null);
        frame.operatorLabel.setText(null);
    }
     
    Ist Dir überhaupt klar, was null ist ?? :rolleyes:

    Ein Textfeld löscht Du ganz simpel, in dem Du einen leeren String zuweist!
    Code (Java):

    myTextField.setText( "" );
     
    Gruß Klaus
     
  7. MaxG.
    MaxG. Mitglied
    Habs jetzt mit deinem Beispiel ausprobiert und der Bug ist immer noch da.
     
  8. VfL_Freak
    VfL_Freak Bekanntes Mitglied
    hast Du denn auch ein "repaint()" ausgeführt ??
     
  9. MaxG.
    MaxG. Mitglied
    Nein wie muss ich das Ausführen?
     
  10. VfL_Freak
    VfL_Freak Bekanntes Mitglied
    :eek:

    frame.repaint() ??????????
     
  11. MaxG.
    MaxG. Mitglied
    Habs jetzt mit .repaint() probiert und hat auch nicht funktioniert
     
  12. VfL_Freak
    VfL_Freak Bekanntes Mitglied
    Moin,

    sorry, ich meinte eigentlich "revalidate" ...

    Gruß Klaus
     
  13. MaxG.
    MaxG. Mitglied
    Habs auch mit .revalidate() probiert geht auch nicht.
     
  14. Viktim
    Viktim Aktives Mitglied
    probier mal erst .repaint und dann .validate auf das Panel aufzurufen ;)
     
  15. Viktim
    Viktim Aktives Mitglied
    So hier mal ein kleines Beispiel:

    Code (Java):
    import java.awt.Dimension;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;

    public class TEST extends JPanel {

      private final Dimension textfeldGroesse = new Dimension(100, 40);

      private JTextField nenner1;
      private JTextField nenner2;

      private JTextField zaehler1;
      private JTextField zaehler2;

      private JButton zuruecksetzen;

      public TEST() {
        setPreferredSize(new Dimension(800, 600));
        baueKomponenten();
        fuegeKomponentenHinzu();
        fuegeVerhaltenHinzu();
        baueFenster();

      }

      private void fuegeVerhaltenHinzu() {
        zuruecksetzen.addActionListener(e -> {
          nenner1.setText("");
          nenner2.setText("");
          zaehler1.setText("");
          zaehler2.setText("");
          repaint();
          validate();
        });
      }

      private void fuegeKomponentenHinzu() {
        add(nenner1);
        add(nenner2);
        add(zaehler1);
        add(zaehler2);
        add(zuruecksetzen);
      }

      private void baueKomponenten() {

        nenner1 = erstelleTextfeld(nenner1, "Nenner Eins");
        nenner2 = erstelleTextfeld(nenner2, "Nenner Zwei");
        zaehler1 = erstelleTextfeld(zaehler1, "Zähler Eins");
        zaehler2 = erstelleTextfeld(zaehler2, "Zähler Zwei");

        zuruecksetzen = new JButton("Zurücksetzten");
      }

      private JTextField erstelleTextfeld(JTextField textfeld, String text) {
        textfeld = new JTextField(text);
        textfeld.setPreferredSize(textfeldGroesse);
        return textfeld;
      }

      private void baueFenster() {
        JFrame frame = new JFrame("TEST FENSTER");
        frame.add(this);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
      }

      public static void main(String[] args) {
        new TEST();
      }
    }
     
     
  16. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

Bruchrechner - Ähnliche Themen

etwas Bruchrechnern
etwas Bruchrechnern im Forum Java Basics - Anfänger-Themen
Codeverbesserung, FH-Hausaufgabe | Bruchrechner
Codeverbesserung, FH-Hausaufgabe | Bruchrechner im Forum Java Basics - Anfänger-Themen
Bruchrechner Test
Bruchrechner Test im Forum Java Basics - Anfänger-Themen
Bruchrechner
Bruchrechner im Forum Java Basics - Anfänger-Themen
Bruchrechner
Bruchrechner im Forum Java Basics - Anfänger-Themen
Thema: Bruchrechner