# Ohm‘schesGesetz



## Gaga (31. Jan 2011)

Erstelle die Formularklasse OhmGUI entsprechend der Abbildung. Die Anwendung soll mit Hilfe des Ohm´schen Gesetzes Widerstände, Spannungen und Stromstärken berechnen (Spannung = Widerstand * Stromstärke bzw. U = R * I).
Bei der Eingabe muss genau eines der drei Textfelder leer bleiben. Der fehlende Wert wird mit Hilfe der beiden eingegebenen Werte berechnet und ausgegeben. Ist kein Textfeld leer oder mehr als eines, so ist eine Fehlermeldung mit einer JOptionPane auszugeben. Für die Berechnung ist die Klasse OhmBL zu erstellen. Die Initialisierung der Werte erfolgt über den Konstruktor. Für die jeweils fehlende Größe wird der Wert Null an den Konstruktor übergeben.

Bitte um Hilfe 

Ich komm einfach nicht drauf wie ich es dazu bekomme die einzelnen Werte auszurechnen
wenn ich etwas vergessen habe (was ich glaube) nicht böse sein bin noch n Anfänger.



GUI Klasse


```
package OhmschesGesetz;

public class OhmschesGesetz_GUI extends javax.swing.JFrame {

    OhmschesGesetzBL obj;

    public OhmschesGesetz_GUI() {
        initComponents();
    }

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

        jPanel1 = new javax.swing.JPanel();
        lbSpannung = new javax.swing.JLabel();
        tfSpannung = new javax.swing.JTextField();
        jPanel2 = new javax.swing.JPanel();
        lbWiderstand = new javax.swing.JLabel();
        tfWiderstand = new javax.swing.JTextField();
        jPanel3 = new javax.swing.JPanel();
        lbStromstärke = new javax.swing.JLabel();
        tfStromstärke = new javax.swing.JTextField();
        jPanel4 = new javax.swing.JPanel();
        btBerechne = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Ohm");
        getContentPane().setLayout(new java.awt.GridLayout(4, 2));

        jPanel1.setLayout(new java.awt.GridLayout(1, 2));

        lbSpannung.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lbSpannung.setText("Spannung:");
        jPanel1.add(lbSpannung);

        tfSpannung.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        tfSpannung.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tfSpannungActionPerformed(evt);
            }
        });
        jPanel1.add(tfSpannung);

        getContentPane().add(jPanel1);

        jPanel2.setLayout(new java.awt.GridLayout(1, 2));

        lbWiderstand.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lbWiderstand.setText("Widerstand:");
        jPanel2.add(lbWiderstand);

        tfWiderstand.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        tfWiderstand.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tfWiderstandActionPerformed(evt);
            }
        });
        jPanel2.add(tfWiderstand);

        getContentPane().add(jPanel2);

        jPanel3.setLayout(new java.awt.GridLayout(1, 2));

        lbStromstärke.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lbStromstärke.setText("Stromstärke:");
        jPanel3.add(lbStromstärke);

        tfStromstärke.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        tfStromstärke.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tfStromstärkeActionPerformed(evt);
            }
        });
        jPanel3.add(tfStromstärke);

        getContentPane().add(jPanel3);

        jPanel4.setLayout(new java.awt.GridLayout(1, 1));

        btBerechne.setText("Berechne");
        btBerechne.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btBerechneActionPerformed(evt);
            }
        });
        jPanel4.add(btBerechne);

        getContentPane().add(jPanel4);

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

    private void btBerechneActionPerformed(java.awt.event.ActionEvent evt) {                                           
        String str1 = this.tfSpannung.getText();
        String str2 = this.tfWiderstand.getText();
        String str3 = this.tfStromstärke.getText();
        float spannung = Float.parseFloat(str1);
        float widerstand = Float.parseFloat(str2);
        float stromstärke = Float.parseFloat(str3);

        obj.berechnen();
        String sp = String.format("Spannung: %.2f" ,spannung);
        

        obj.berechnen();
        String w = String.format("Widerstand: %.2f " ,widerstand);
        

        obj.berechnen();
        String st = String.format("Stromstärke: %.2f" ,stromstärke);
        
    }                                          

    private void tfSpannungActionPerformed(java.awt.event.ActionEvent evt) {                                           
        String str1 = this.tfSpannung.getText();
        float spannung = Float.parseFloat(str1);
        obj.berechnen();
        String sp = String.format("Spannung: %.2f" ,spannung);
        
    }                                          

    private void tfWiderstandActionPerformed(java.awt.event.ActionEvent evt) {                                             
        String str2 = this.tfWiderstand.getText();
        float widerstand = Float.parseFloat(str2);
        obj.berechnen();
        String w = String.format("Widerstand: %.2f " ,widerstand);
        
    }                                            

    private void tfStromstärkeActionPerformed(java.awt.event.ActionEvent evt) {                                              
        String str3 = this.tfStromstärke.getText();
        float stromstärke = Float.parseFloat(str3);
        obj.berechnen();
        String st = String.format("Stromstärke: %.2f" ,stromstärke);
        
    }                                             

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new OhmschesGesetz_GUI().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton btBerechne;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JLabel lbSpannung;
    private javax.swing.JLabel lbStromstärke;
    private javax.swing.JLabel lbWiderstand;
    private javax.swing.JTextField tfSpannung;
    private javax.swing.JTextField tfStromstärke;
    private javax.swing.JTextField tfWiderstand;
    // End of variables declaration                   
}
```


BL (Business Layer) Klasse


```
package OhmschesGesetz;

public class OhmschesGesetzBL {

    private float  spannung, widerstand, stromstärke;


    public OhmschesGesetzBL (float sp, float w, float st)
  {
    spannung = sp;
    widerstand = w;
    stromstärke = st;
  }

    public void berechnen()
    {
        spannung = widerstand * stromstärke;

        widerstand = spannung / stromstärke;

        stromstärke = spannung / widerstand;
    }
}
```


----------



## eRaaaa (31. Jan 2011)

Vor lauter Code hast du deine Frage vergessen!
(edit : ahhh! )


----------



## Murray (31. Jan 2011)

Was genau erwartest Du von Deiner BL-Klasse? Derzeit übergibst Du Werte im Konstruktor und berechnest sie dann in der Methode _berechnen()_ neu, ohne mit den Ergebnissen etwas zu machen.


----------



## w0ddes (1. Feb 2011)

Also wenn du es unbedingt so machen willst fehlt zu allererst mal ein 
	
	
	
	





```
obj = new OhmschesGesetzBL();
```
Dann würde ich 3 Methoden für jede Berechnung machen und mit einem Rückgabewert versehen: 

```
public float berechneSpannung()  //entweder im Konstruktor oder eben hier Werte übergeben
    { float spannung = 0.0;
       //Berechnung
     return spannung;
    }
```

und diesen Rückgabewert dann in deiner GUI Klasse so (oder so ähnlich) verwenden: 

```
float spannung = 0.0;
obj = new OhmschesGesetzBL(spannung, widerstand, stromstaerke);
spannung = obj.berechneSpannung();
```

Aber da is noch mehr in deinem Quelltext, das ich anders lösen würde...


----------



## Andi_CH (1. Feb 2011)

Da ist ja meine Ohm-Klasse wieder, leider aber zum Schlechten verbastelt - haben wir letzte Woche nicht alle deine Fragen beantwortet?

Deine Funktion berechnen macht aber gar nichts schlaues!

Stell dir vor ich setze die Werte

Spannung = 1 Volt
Widerstand = 1 Ohm
Stom = 0 Ampere

Ich rufe berechnen auf

1. Zeile  spannung = widerstand * stromstärke;

1 Ohm * 0 Ampere -> spannung ist jetzt 0 Volt

2. Zeile widerstand = spannung / stromstärke;
Exception DivisionByZero oder wie auch immer die heisst

3. Zeile stromstärke = spannung / widerstand;
Wird schon gar nicht mehr ausgeführt.

Du musst überprüfen welcher Wert 0 ist und die entsprechende Formel ausführen - aber nur die!


----------

