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 dieser Java-Kurs hier 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
     
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

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. bruchrechner java