Klasse/Konstruktor/Feld

Nirvana

Aktives Mitglied
Ich habe probleme mit dem Programmieren des Umfelds für mein programm. Ich zeige mal die Angabe, wie ich das Umfeld des programms schreiben soll-

Programmiere eine Klasse Vektor2D.
Ein vektor ist definiert als ein paar von Fließkommazahlen für die erste bzw. zweite Richtung in der Ebene. Die jeweiligen Richtungen bzw. Koordinaten sollen private felder des Typ double sein.
Die Klasse soll mehere Konstruktoren haben:
public Vektor2D(double x, double y) -Hauptkonstruktor
public Vektor2D()- Vektor mit dem Wert (0,0)
public Vektor2D(Vektor2D c) - generiere ein unabhängiges, neues Vektor2D-Objekt aus einem existierenden Vektore2D Objekt ("Copy-Constructor)


Frage: Sind Felder nicht variabelen, deren Gültigkeitsbereich sich über eine Klase erstreckt. Wieso soll ich die noch mit private markieren?


Java:
public class Vektor2D {
private double x,y;

Vektor2D Vektor1 = new Vektor2D();
Vektor2D Vektor0 = new Vektor2D();
}

Frage: das sind ja jetzt zwei Objekte, wie fülle ich diese einmal mit x und y Koordinate und einmal mit 0 und 0? In die Klammern () darf ich laut netbeans nicht schreiben ;(
Frage: Ich verstehe nicht ganz was ein "Copy-Constructor" sein soll.
 
In die Klammern () darf ich laut netbeans nicht schreiben ;(
Weil du nicht das machst was die Aufgabe sagt. Erstelle Konstruktoren! Lies in deinem Buch ochmal nach was das ist. Die zwei Zeilen da sind a) keine Konstruktoren und machen b) null sinn

Was ein Copy-Konstruktor ist, beschreibt doch schon die Aufgabe an sich:
"generiere ein unabhängiges, neues Vektor2D-Objekt aus einem existierenden Vektore2D Objekt ("Copy-Constructor)"
 
Die Sichtbarkeit einer Klassen- und Instanzvariable und -konstanten erstreckt sich standartgemäß über das Package. Mit den Modis kannst du sie über das ganze Programm ausdehnen (public), auf das Package und Geerbtes (protected) setzen und auf die eigene Klasse (private) festlegen. In den meisten "Anwendungsklassen"-Fällen werden Konstanten public und Variablen privat. In "Apiklassen"-Fällen kommt dann meistens noch default hinzu. z. B. falls du das package de.nirvana.auto hast und darin die Klassen Auto, Reifen, Motor, Chassis usw. wirst du vielleicht alles ausser Auto default machen, damit niemand direkt auf die Kompositionen wie den Motor zugreifen kann. Das ist aber ein aus der Luft gegriffenes Beispiel, da die Klassen alle sehr abstrakt sind und deshalb vielleicht auch einzeln verwendet werden sollten und es andererseits keine echte Komposition ist, das ein Motor auch ohne Auto existieren wird. (Was aber imo ein schwieriger Fall ist, da Auto nur ein Begriff für die zusammengesetzten Teile ist und deshalb selbst auch nur eine Interfaceklasse zu den Funktionen und selbst nicht existiert.)
 
Okay das habe ich nun.
Ich stecke nun bei der Berechnung des Winkels:
Programmiere folgende Methode:
public double winkel(vektor2D other) - Winkel zwischen den beiden Vektoren in Radiant.

Java:
     public double winkel(Vektor2D other){
     double k=(this.x * other.x + this.y *other.y)/((Math.hypot(this.x,this.y)*Math.hypot(other.x,other.y)));
     double Bogenmass= Math.acos(k);
     double radiant =(Bogenmass*Math.PI/180);
     return radiant;
     }
Wenn ich das mir ausrechnen lasse, dann kommt nicht das richtige raus. Also kein Programmierfehler sondern ein denkfehler im rechnen^^
Felder,Konstruktoren usw. sind schon am anfang erledigt.
 
Na, dann schreib mal die Formel für die richtige Berechnung hin.
Wie würde die am Papier aussehen?

Dann mach die einzelnen Schritte in Java.
Los gehts:...
 
ich finde leider den fehler nicht. Ich weiß wie man es ausrechnet, aber in java ist das ja etwas komplizierter mit den zuweisungen, befehlen.
Ist mir bei der Umrechnung oder beim berechnen des Winkels ein fehler unterlaufen?
 
Die Berechnung des Winkel ist richtig. Math.acos(k); liefert dir allerdings bereits den Winkel in rad. Diee Zeile double radiant =(Bogenmass*Math.PI/180); ist also zu viel. Lösch sie einfach, und du solltest das gewünschte Ergebnis erhalten.

Gruß Fant

[EDIT]
Du musst dann natürlich den Wert, der in Bogenmass steht, zurückgeben... [/EDIT]

[TIPP]
Bei der Berechnung solltest du aber noch prüfen, ob this oder other der Nullvektor ist und dann π/4 zurückgeben (oder meinetwegen eine Exception werfen). Sonst fliegt jedenfalls eine RuntimeException bei einer Division durch Null.
[/TIPP]
 
Zuletzt bearbeitet:

Zurück
Oben