Swing Verkaufspreisberechnung JCheckBox

FabianLurz

Bekanntes Mitglied
Hallo Leute,
ihr würdet mir echt einen GROßEN gefallen tun wenn ihr dieses Programm mal kopiert und in Eclipes oder Netbeans ausprobiert. Hier erstmal der Quellcode:
Java:
package kostenrechner;

public class Skin extends javax.swing.JFrame {

    public Skin() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jToggleButton1 = new javax.swing.JToggleButton();
        EK = new javax.swing.JTextField();
        VK = new javax.swing.JTextField();
        VS = new javax.swing.JTextField();
        Gewinn = new javax.swing.JTextField();
        a = new java.awt.Label();
        label2 = new java.awt.Label();
        label3 = new java.awt.Label();
        label1 = new java.awt.Label();
        label4 = new java.awt.Label();
        label5 = new java.awt.Label();
        label6 = new java.awt.Label();
        label7 = new java.awt.Label();
        GG = new java.awt.Checkbox();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("eBay Calculator");
        setResizable(false);

        jToggleButton1.setText("Berechnen");
        jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jToggleButton1ActionPerformed(evt);
            }
        });

        EK.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                EKActionPerformed(evt);
            }
        });

        VS.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                VSActionPerformed(evt);
            }
        });

        Gewinn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                GewinnActionPerformed(evt);
            }
        });

        a.setText("Einkaufspreis");

        label2.setText("Verkaufspreis");

        label3.setText("Versandkosten");

        label1.setText("Gewinn");

        label4.setText("€");

        label5.setText("€");

        label6.setText("€");

        label7.setText("€");

        GG.setLabel("gewünschter Gewinn");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(a, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(35, 35, 35)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(EK, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)
                            .addComponent(Gewinn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)
                            .addComponent(VS, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)
                            .addComponent(VK, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(label5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(label6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(label7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(GG, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 149, Short.MAX_VALUE)
                        .addComponent(jToggleButton1)
                        .addGap(96, 96, 96))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(50, 50, 50)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(a, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(EK, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(label5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(VK, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(label6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(VS, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(Gewinn, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(label7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 22, Short.MAX_VALUE)
                        .addComponent(jToggleButton1)
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(GG, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())))
        );

        pack();
    }// </editor-fold>                        

    private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
        double ek = 0;
        double vk = 0;
        double gewinn = 0;
        if (GG.getState() == false) {
            vk = (Double.parseDouble(VK.getText()));
        }
       
        double vs = 0;
        
        String ergebnis = null;

        if (GG.getState() == false) {

            ek = (Double.parseDouble(EK.getText()));
            vs = (Double.parseDouble(VS.getText()));

            if (vk >= 501) {
                gewinn = (vk * (0.039 - 1) + 21.50 + 0.35 + vs + ek) * (-1);
            }

            if (vk < 501 && vk > 50.01) {
                gewinn = (vk * 0.059 + 3.5 + 0.35 + vs + ek - vk) * (-1);
            } else {
                gewinn = (vk * 0.089 + 0.35 + vs + ek - vk) * (-1);
            }
            ergebnis = Double.toString(gewinn);
            Gewinn.setText(ergebnis);
        } else {

            ek = (Double.parseDouble(EK.getText()));
            vs = (Double.parseDouble(VS.getText()));
            gewinn = Double.parseDouble(Gewinn.getText());

            vk = (gewinn + (21.5 + 0.35 + vs + ek)) / (1-0.039);
            ergebnis = Double.toString(vk);

            VK.setText(ergebnis);
        }


    }                                              

    private void EKActionPerformed(java.awt.event.ActionEvent evt) {                                   
    }                                  

    private void VSActionPerformed(java.awt.event.ActionEvent evt) {                                   
        // TODO add your handling code here:
    }                                  

    private void GewinnActionPerformed(java.awt.event.ActionEvent evt) {                                       
    }                                      

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Skin().setVisible(true);
                new Skin().setTitle("eBay Calculator");
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JTextField EK;
    private java.awt.Checkbox GG;
    private javax.swing.JTextField Gewinn;
    private javax.swing.JTextField VK;
    private javax.swing.JTextField VS;
    private java.awt.Label a;
    private javax.swing.JToggleButton jToggleButton1;
    private java.awt.Label label1;
    private java.awt.Label label2;
    private java.awt.Label label3;
    private java.awt.Label label4;
    private java.awt.Label label5;
    private java.awt.Label label6;
    private java.awt.Label label7;
    // End of variables declaration                   
}

Diese Datei heißt Skin und das package heißt Kostenrechner.

Dann braucht ihr noch die kleine Main:
Java:
package kostenrechner;

public class Main {

  
    public static void main(String[] args) {
       Skin sc=new Skin();
       sc.main(args);
       
    }

}

So ich erkläre mal kurz. Ich will einen Kostenrechner bauen. Dazu hab ich ein JFrame Formular genommen und die Logik wird ausgelöst sobald man auf den Button drückt. Das Programm hat allerdings einen sehr merkwürdigen Fehler.
Ich mache mal ein Bsp.:
Einkaufspreis: 548€
Verkaufspreis:699€
Versand: 15€
Gewinn; 73.498.....€
So...
Aktiviere ich nun die Checkbox "gewünschter Gewinn" wird rekursiv gerechnet. D.h. dass ich jetzt den Verkaufspreis errechne mit einem von mir eingegeben Gewinn. D.h. die Formel hab ich einfach unmgestellt nach Verkaufspreis. Dies scheint aber irgendwie inkorrekt zu sein. Aktiviert nun am besten einfach mal die Checkbox "gewünschter Gewinn" und drückt erneut auf berechnen. Ihr werdet feststellen, dass sich der Verkaufspreis ändert obwohl er das nicht dürfte.
WÄRE ECHT SUPER WENN IHR MIR HELFEN KÖNNTET:)
Danke für alle die sich diese Mühe machen.
Lg
Fab
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
hm, also rekursiv wird da gar nichts ausgerechnet.

du schreibst doch in deinem code
Java:
VK.setText(ergebnis);
Dass sich dann der text von Verkaufspreis ändert ist doch klar, was willst du denn stattdessen haben?
 

FabianLurz

Bekanntes Mitglied
Hey,
jo der Wert soll sich ja auch ändern. Also wenn ich ja vorher folgende Werte eingeb:
Ek: 548€
Vk: 699
Vs: 15€
Gewinn: 74,34988...€

So dann setze ich die Checkbox auf "gewünschter Gewinn" lösche den Wert VK und klick dann auf den Button und berechne erneut. Der eingetragene bzw. vorher berechnete Gewinn und der VK und VS bleiben gleich. Der Verkaufspreis darf sich ja nun NICHT ändern da der Gewinn den ich mir wünsche gleich bleibt...bisschen schwer auszudrücken.
Der Fehler scheint aber seitens Java zu sein. Habe die selbe Logik in C implementiert und da kommen die richtigen Ergebnisse raus. Es hängt wohl mit dem double zusammen. Double kennt ja z.b. kein Assoziativgesetz. Vllcht. findet jemand eine Lösung. C wäre wircklich das letzte das ich dafür benutzen wollte^^
Lg
 
G

Gast2

Gast
Ich möchte mal bezweifeln dass das Assoziativgesetz für Double nicht gilt ;)
(bzgl + und * natürlich)

Java:
    public static void main(String[] args) {
       double a = 3d;
       double b = 5d;
       double c = 2d;
       
       double r1 = a + (b + c);
       double r2 = (a + b) + c;
       
       double s1 = a * (b * c);
       double s2 = (a * b) * c;
       
       System.out.println(r1 + " == " + r2);
       System.out.println(s1 + " == " + s2);
    }
Oder hast du nen gegenbeispiel?

Dein Problem hört sich eher nach ner falschen umformung an.
Beim ersten fall hast du drei fallunterscheidungen und damit drei verschiedene formeln. beim rückrechnen hast du keinen fallunterscheidungen mehr und nimmst nur eine formel her, das kann ja nicht hinhaun.
 

FabianLurz

Bekanntes Mitglied
Ein Gegenbeispiel hab ich gestern in einem anderen Forum gelesen. Finde es jetzt tatsächlich aber nicht mehr auf die schnelle.
Das mit der Fallunterscheidung ist schon richtig:) Aber ich bleibe ja in dem Bereich der ersten Fallunterscheidung deswegen müsste das definitiv erstmal so funktionieren. Logisch wenn die Beträge in der zweiten Fallunterscheidung liegen und ich dann zurückrechne das es erstmal Falsch ist. Tatsächlich kann ich zu 10000% ausschließen dass die Formel falsch umgestellt ist^^. Mein TI hat sie zweimal gelöst und zwei Mathestudenten (die arbeiten bei uns in der Firma) ebenfalls^^ Ich selbst auch noch und ich habe auch sehr sehr viel mit mathe zu tun.
Desweiteren wie gesagt funktioniert der ganze Kram in C. Also muss es irgend einen komischen Fehler mit Java geben.
Lg und danke für die Antworten bis jetzt:)
Fab
 

Suinos

Bekanntes Mitglied
Auch der Rechner von XP gibt das gleiche Ergebnis wie Java, siehe Anhang.
Das ist kein Fehler von Java.
 

Anhänge

  • vergleich.JPG
    vergleich.JPG
    54,8 KB · Aufrufe: 33

HoaX

Top Contributor
Na wenn Fehler in der einen Richtung ausgeschlossen ist (ich habs auch nachgerechnet), dann liegt er in der anderen: Bingo!

Java:
            if (vk >= 501) {
                gewinn = (vk * (0.039 - 1) + 21.50 + 0.35 + vs + ek) * (-1);
            }

            if (vk < 501 && vk > 50.01) {
                gewinn = (vk * 0.059 + 3.5 + 0.35 + vs + ek - vk) * (-1);
            } else {
                gewinn = (vk * 0.089 + 0.35 + vs + ek - vk) * (-1);
            }

Dein Else-Zweig im zweiten If überschreibt das Ergebnis auf dem ersten if. Mach das daraus:
Java:
            if (vk >= 501) {
                gewinn = (vk * (0.039 - 1) + 21.50 + 0.35 + vs + ek) * (-1);
            } else // HIER!

            if (vk < 501 && vk > 50.01) {
                gewinn = (vk * 0.059 + 3.5 + 0.35 + vs + ek - vk) * (-1);
            } else {
                gewinn = (vk * 0.089 + 0.35 + vs + ek - vk) * (-1);
            }
und es geht
 

Ähnliche Java Themen

Neue Themen


Oben