# Dreieck- Strecken berechen



## Svenja F (18. Sep 2011)

Hallo,

wir müssen in der Schule ein Dreieck machen, mit welchem man durch Angabe der Punkte eine Strecke berechnen kann. Ich denke das ich schon ziemlich weit bin nur weiß ich jetzt nicht wo die Rechnung hin muss und wie ich das machen soll.

Da ich nicht weiß wie ich das hier einfügen muss weil das ja mehrere Fenster sind wäre es gut wenn ich es demjenigen der mir helfen möchte per mail zusenden kann. Das wäre echt sehr sehr nett weil ich brauche das Programm morgen und muss es abgeben. Nur leider komme ich nicht weiter.

Vielen Dank für die Hilfe !!!!!!


----------



## Svenja F (18. Sep 2011)

ich kopiere den ganzen Code soweit ich es kann..
*
bei Dreieck.java habe ich:*


```
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 12.09.2011
  * @author
  */

public class Dreieck {


  // Anfang Attribute
  public Punkt A;
  public Punkt B;
  public Punkt C;
  
  public double Ergebnis;
  // Ende Attribute

  // Anfang Methoden
  public double Strecke(Punkt Punkt1, Punkt Punkt2) {
  
   Ergebnis = Math.sqrt(Math.pow(Punkt1.xKoordinate-Punkt1.yKoordinate),2)+(Math.pow(Punkt2.xKoordinate-Punkt2.yKoordinate),2);
    return Ergebnis;
  }

  // Ende Methoden
}
```





*bei Oberflaeche.java habe ich:*


```
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 12.09.2011
  * @author
  */

public class Oberflaeche extends Applet {
  // Anfang Attribute
  private TextField textField1 = new TextField();
  private TextField textField2 = new TextField();
  private TextField textField3 = new TextField();
  private TextField textField4 = new TextField();
  private TextField textField5 = new TextField();
  private TextField textField6 = new TextField();
  private Label label1 = new Label();
  private Label label2 = new Label();
  private Label label3 = new Label();
  private Label label4 = new Label();
  private Label label5 = new Label();
  private TextField strecke = new TextField();
  private Button button1 = new Button();
  // Ende Attribute

  public void init() {
    Panel cp = new Panel(null);
    cp.setBounds(0, 0, 558, 300);
    add(cp);
    // Anfang Komponenten

    textField1.setBounds(24, 40, 81, 24);
    textField1.setText("textField1");
    cp.add(textField1);
    textField2.setBounds(24, 72, 81, 24);
    textField2.setText("textField2");
    cp.add(textField2);
    textField3.setBounds(144, 40, 81, 24);
    textField3.setText("textField3");
    cp.add(textField3);
    textField4.setBounds(144, 72, 81, 24);
    textField4.setText("textField4");
    cp.add(textField4);
    textField5.setBounds(264, 40, 81, 24);
    textField5.setText("textField5");
    cp.add(textField5);
    textField6.setBounds(264, 72, 81, 24);
    textField6.setText("textField6");
    cp.add(textField6);
    label1.setBounds(32, 16, 55, 16);
    label1.setText("Punkt A");
    label1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label1);
    label2.setBounds(8, 48, 18, 16);
    label2.setText("X");
    label2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label2);
    label3.setBounds(8, 80, 19, 16);
    label3.setText("Y");
    label3.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label3);
    label4.setBounds(152, 16, 55, 16);
    label4.setText("Punkt B");
    label4.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label4);
    label5.setBounds(272, 16, 55, 16);
    label5.setText("Punkt C");
    label5.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label5);
    strecke.setBounds(88, 128, 97, 24);
    strecke.setText("strecke");
    cp.add(strecke);
    button1.setBounds(208, 128, 129, 25);
    button1.setLabel("Berechne Strecke");
^    button1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button1_ActionPerformed(evt);
      }
    });
    cp.add(button1);
    // Ende Komponenten

  }
  // Anfang Methoden
  public void button1_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
```


*und bei Punkt.java:*



```
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 12.09.2011
  * @author
  */

public class Punkt {

  // Anfang Attribute
  public double xKoordinate;
  public double yKoordinate;
  // Ende Attribute

  // Anfang Methoden
  // Ende Methoden
}
```

*
Wo muss jetzt die Rechnung hin und wie mache ich das
In der Schule hatten wir das mit der Wurzel aus y koordinate minus x koordinate oder so*


----------



## Landei (18. Sep 2011)

- Variablen- und Methodennamen bitte immer *klein *schreiben!
- Mach doch aus xKoordinate bitte x, das kann doch keiner lesen!
- die Variable Ergebnis ist keine Instanzvariable, du brauchst sie doch nur lokal in der Methode
- Deine Formel ist falsch, du musst die Differenzen der x-Koordinaten und der y-Koordinaten bilden, nicht die der Koordinaten eines Punktes. Am besten schön schrittweise:


```
public static double strecke(Punkt p1, Punkt p2) {
     double dx = p1.x - p2.x;
     double dy = p1.y - p2.y;  
     return Math.sqrt(dx*dx + dy*dy);
  }
```

- ich habe die Formel statisch gemacht (etwa wie Math.sqrt), denn du brauchst kein bestimmtes Dreick, um sie aufzurufen (jetzt geht [c]Dreieck.strecke(p1, p2)[/c]). Aber sie wäre sowiesp besser in Punkt aufgehoben
- lass die absolut nichtssagenden Kommentare weg. Wer eine Variable nicht von einer Methode unterscheiden kann, liest selten Quelltexte


----------



## 0x7F800000 (18. Sep 2011)

Svenja F hat gesagt.:


> wir müssen in der Schule ein Dreieck machen, mit welchem man durch Angabe der Punkte eine Strecke berechnen kann.


Welche "Strecke"? In jedes Dreieck kann man drei dutzend sinnvolle Strecke einzeichnen, und es dürfte aus symmetriegründen keinerlei Kriterien geben, sich für eine spezielle Strecke zu entscheiden.



> ```
> public Punkt A;
> public Punkt B;
> public Punkt C;
> ...


member variablen werden kleinInCamelCase geschrieben, unabhängig von den konventionen der schulmathebücher. Was "Ergebnis" in den member-variablen verloren haben soll, ist unklar.



> public double Strecke(Punkt Punkt1, Punkt Punkt2) {
> 
> Ergebnis = Math.sqrt(Math.pow(Punkt1.xKoordinate-Punkt1.yKoordinate),2)+(Math.pow(Punkt2.xKoordinate-Punkt2.yKoordinate),2);
> return Ergebnis;
> }


Wie hängen die parameter mit dem dreieck zusammen? Wenn sie damit gar nicht zusammenhängen, wieso ist die methode dann nicht statisch? Die länge der Hypothenuse wird mit Math.hypot(x, y) viel stabiler und sehr viel schneller ausgewertet, als die mosntröse konstruktion, die du für "Ergebnis" benutzst.

Zur GUI: 
- wie kamst du darauf, AWt zu nutzen? In allen Büchern der letzten zehn Jahre wird eigentlich nur noch mit swing gearbeitet.

- warum schreibst du jedes Textfeld dreimal aus, verwende doch for-schleifen
- warum setztst du alle korrdinaten per hand, nutze doch einen layout-manager, da spart man sich solche schreibarbeit

Zu der eigentlichen Frage:
 Es scheint mir immer noch unklar, was du berechnen willst.


----------



## Landei (18. Sep 2011)

Wollen wir mal nicht so sein. Hier ist eine Swing-Implementierung:


```
public class Punkt {
    public final double x;
    public final double y;

    Punkt(double x, double y) {
        this.x = x;
        this.y = y;
    }
    
    public static double strecke(Punkt p1, Punkt p2) {
        double dx = p1.x - p2.x;
        double dy = p1.y - p2.y;
        return Math.sqrt(dx * dx + dy * dy);
    }
    
}
```


```
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class PunktPanel extends JPanel {
    
    private JTextField xField = new JTextField("0.0", 10);
    private JTextField yField = new JTextField("0.0", 10);
    
    public PunktPanel(String name) {
        add(new JLabel("Punkt " + name + "   x:"));
        add(xField);
        add(new JLabel("   y:"));
        add(yField);
    }
    
    public Punkt getPunkt() {
        try {
            double x = Double.parseDouble(xField.getText());
            double y = Double.parseDouble(yField.getText());
            return new Punkt(x,y);
        } catch(NumberFormatException ex) {
            return new Punkt(0.0, 0.0);
        }
    }
    
}
```


```
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;


public class Gui {
    
    private JFrame frame;
    private PunktPanel aPanel = new PunktPanel("a");
    private PunktPanel bPanel = new PunktPanel("b");
    private PunktPanel cPanel = new PunktPanel("c");
    private JLabel abLabel = new JLabel("Strecke a <-> b = 0.0");
    private JLabel acLabel = new JLabel("Strecke a <-> c = 0.0");
    private JLabel bcLabel = new JLabel("Strecke b <-> c = 0.0");
    private JButton button = new JButton("Berechnung");
    
    public Gui(){
        frame = new JFrame("Dreiecke");
        frame.getContentPane().setLayout(new GridLayout(7,1));
        frame.add(aPanel);
        frame.add(bPanel);
        frame.add(cPanel);
        frame.add(abLabel);
        frame.add(acLabel);
        frame.add(bcLabel);
        frame.add(button);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
        
        button.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                berechne();
            }
        });
    }
    
    public void berechne() {
        Punkt a = aPanel.getPunkt();
        Punkt b = bPanel.getPunkt();
        Punkt c = cPanel.getPunkt();
        double ab = Punkt.strecke(a, b);
        double ac = Punkt.strecke(a, c);
        double bc = Punkt.strecke(b, c);
        abLabel.setText("Strecke a <-> b = " + ab);
        acLabel.setText("Strecke a <-> c = " + ac);
        bcLabel.setText("Strecke b <-> c = " + bc);
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new Gui();
            }
        });
    }
    
}
```

Die Klasse Dreieck ist hier überflüssig.


----------

