Seite 3 von 3
Re: 2. Übungsblatt - Abgabe: 28. November
Verfasst: Mi 26. Nov 2008, 09:40
von salami
Oder man zeigt dem Compiler, dass es eine Gleitkommazahl ist:
Also entweder 1.0 oder 3.0 für double oder 1f oder 3f für float.
Noch kompakter:
Re: 2. Übungsblatt - Abgabe: 28. November
Verfasst: Do 27. Nov 2008, 13:21
von Thomas
hab hier ma meine Aufgabe 5 gepostet, kann mir mal jemand sagen ob die in die richtige richtung geht? fehler werden auf jeden fall drin sein^^
falls jemand die zeit und lust hätte sich das ma anzuschauen und zu sagen was falsch is, wär ich sehr dankbar
Code: Alles auswählen
Aufgabe 5)
class Point {
//Attribute
double x ; //x-Koordinate des Punktes
double y ; //y-Koordinate des Punktes
//Konstruktor
Point(double x, double y) {
this.x = x;
this.y = y;
}
class Triangle{
//Attribute
Point p1;
Point p2;
Point p3;
//Konstruktor
Triangle(Point p1, Point p2, Point p3) {
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}
}
a)
void shift(double dx, double dy) {
this.x = this.x + dx;
this.y = this.y + dy;
}
void shift(double betrag) {
this.p1 = this.p1 + betrag;
this.p2 = this.p2 + betrag;
this.p3 = this.p3 + betrag;
}
b)
//Rotationsmethode mit Winkel als Argument
void rotate(double angle) {
double phi = Math.toRadians(angle);
double xOld = this.x;
double yOld = this.y;
this.x = xOld * Math.cos(phi) - yOld * Math.sin(phi);
this.y = xOld * Math.sin(phi) + yOld * Math.cos(phi);
}
//Ausführung der RotationsMethode mit Winkel als Argument
void rotate(double angle) {
this.p1.rotate(angle);
this.p2.rotate(angle);
this.p3.rotate(angle);
}
c)
//Rotationsmethode mit Punkt und Winkel als Argument
void rotate(Point center, double angle) {
double xOfCenter = center.x;
double yOfCenter = center.y;
this.shift(-xOfCenter, -yOfCenter);
this.rotate(angle);
this.shift(xOfCenter, yOfCenter);
}
//Ausführung der RotationsMethode mit Punkt und Winkel als Argument
void rotate(Point center, double angle) {
this.p1.rotate(center, angle);
this.p2.rotate(center, angle);
this.p3.rotate(center, angle);
}
d)
//Hilfsmethode zum Quadrieren
private double square(double a) {
return a * a;
}
//Berechnung des Umfangs
double umfang() {
double s1 = Math.sqrt (square(p2.x-p1.x)+square(p2.y-p1.y))
double s2 = Math.sqrt (square(p3.x-p1.x)+square(p3.y-p1.y))
double s3 = Math.sqrt (square(p2.x-p3.x)+square(p2.y-p3.y))
return s1+s2+s3
}
e)
//Hilfsmethode zum Quadrieren
private double square(double a) {
return a * a;
}
//Flaechenberechnung
double flaeche() {
double b = Math.sqrt (square(p2.x-p1.x)+square(p2.y-p1.y))
double c = Math.sqrt (square(p3.x-p1.x)+square(p3.y-p1.y))
double d = Math.sqrt (square(p2.x-p3.x)+square(p2.y-p3.y))
double e = 0.5*(b+c+d)
return Math.sqrt(e*(e-b)*(e-c)*(e-d))
}
f)
//Berechnung des Schwerpunkts
Point schwerpunkt() {
//X-Koordinate des Schwerpunkts
double schwerX = (p1.x+p2.x+p3.x)/3.0
//Y-Koordinate des Schwerpunkts
double schwerY = (p1.y+p2.y+p3.y)/3.0
return new Point(schwerX, schwerY)
}
Re: 2. Übungsblatt - Abgabe: 28. November
Verfasst: Do 27. Nov 2008, 15:52
von void
Also prinzipiell sieht das schomal gut aus, aber ich würde die Methoden ruhig auch in die Klassen tun. Du kannst die sehr gut mit den "Dokumentationskommentaren" ausstatten um die erkennbar zu machen (dafür sind die da...). Geht in etwa so:
ANMERKUNG: Eigentlich macht man das so, dass die ersten * in jeder Reihe untereinander stehen. Geht aber iwie nich, kp warum.
Code: Alles auswählen
/**
* In dieser Datei steht die Klasse bar. Dies ist ein
* Dateikommentar weil er ganz am Anfang der Datei steht.
* Unterscheide weiterhin, ob ein Kommentar mit /* oder /** beginnt.
* Zwei Sterne bedeutet Doku-Kommentar, einer normaler Block-Kommentar.
*/
/**
* Dies ist eine Klasse um was zu machen. Dies hier ist ein
* Klassenkommentar, weil er direkt über dem Klassenkopf steht.
*/
public class bar {
/**
* Hier passiert vielleicht irgendwas. Das ist übrigens ein Methodenkommentar.
*
* @return irgend eine zahl
* @param a eine zahl
*/
public int foo(int a) {
int irgendwas = ........;
return irgendwas;
} // of foo(int a)
} // of class bar
Das ist so der 'right way to do it' (Korrigiert mich falls das unsinn ist(!))
Aber was ganz anderes: Wie habt ihr bei der g die Tests gemacht? Ich hab jetzt einfach die Methoden durchgetestet und mach halt ne nette Ausgabe, aber das wird sehr viel Code (wohl >1 Seite für die main). Alternative wäre jUnit, aber ich kann mir nicht vorstellen, dass die erwarten, dass wir jetzt für dieses ÜB extra sone klobige Library lernen...
Opinions please?
Re: 2. Übungsblatt - Abgabe: 28. November
Verfasst: Do 27. Nov 2008, 16:06
von |silent
void hat geschrieben:
Aber was ganz anderes: Wie habt ihr bei der g die Tests gemacht? Ich hab jetzt einfach die Methoden durchgetestet und mach halt ne nette Ausgabe, aber das wird sehr viel Code (wohl >1 Seite für die main). Alternative wäre jUnit, aber ich kann mir nicht vorstellen, dass die erwarten, dass wir jetzt für dieses ÜB extra sone klobige Library lernen...
Opinions please?
Moin void,
also die wollen sicherlich keine so ausführliche Sache. Einfach nur die Ausgabe mit einem beliebigem Dreieck, das soll uns glaub dabei helfen zu lernen wie Ein- und Ausgaben mit der Terminal-Klasse und allgemein funktionieren. Ich hab mir ein kleines Menü gebastelt, bei der du auswählen kannst was das Programm tun soll, vorher musst natürlich die Punkte eingeben und dann kannst folgendes machen:
Code: Alles auswählen
Geben Sie jetzt 3 Punkte für das Dreieck ein!
Punkt 1 X:1
Punkt 1 Y:1
Punkt 2 X:3
Punkt 2 Y:1
Punkt 3 X:1
Punkt 3 Y:3
Was möchten Sie tun?
----------------------------------
[0] Punkte anzeigen
[1] (a) Dreieck um (1.0/2.0) verschieben
[2] (b) Dreieck um 90.0° um Ursprung drehen
[3] (c) Dreieck um 90.0° um (1.0/2.0) drehen
[4] (d) Umfang des Dreiecks
[5] (e) Fläche des Dreiecks
[6] (f) Schwerpunkt des Dreiecks
[9] Programm beenden
----------------------------------
Geben Sie bitte jetzt eine Zahl ein: 0
Das is aber reine spielerei und muss nicht sein. Am einfachsten isses, wenn du nacheinander alle Operationen durchführst und nach jeder Operation die aktuellen Punkte/Werte anzeigst.
Re: 2. Übungsblatt - Abgabe: 28. November
Verfasst: Fr 28. Nov 2008, 17:48
von GoukipK
void hat geschrieben:
Das ist so der 'right way to do it' (Korrigiert mich falls das unsinn ist(!))
Diese "Pepper"-Kommentare am Ende von Klassen / Methoden sollen wir weglassen.
Sollen wir uns gar nicht erst angewöhnen.
Re: 2. Übungsblatt - Abgabe: 28. November
Verfasst: Sa 29. Nov 2008, 17:38
von Nukleus
GoukipK hat geschrieben:Diese "Pepper"-Kommentare am Ende von Klassen / Methoden sollen wir weglassen.
Sollen wir uns gar nicht erst angewöhnen.
Hehe, wenn Java einen Praeprozessor haette, waere es bei dem manchmal sinnvoll. aber sowas ham die ja nicht