Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Schreibe eine Klasse Vektor2DMatrix. (eine klasse Vektor2D habe ich schon geschrieben) Konstruktoren habe ich - nun stecke ich bei einer methode:
Methode: public static Vektor2DMatrix random (int n)
//Zufallsmatrix, n x n Matrix mit zufälligen Einträgen
Es soll also eine n x n Matrix mit zufälligen Vektor2D-Eintragungen befüllt werden.
Einer meiner Konstruktoren, den ich hier brauche:
Java:
public Vektor2DMatrix(int n){
matrix = new Vekktor2D[n][n];
}
Java:
public static Vektor2DMatrix random(int n){
Vektor2DMatrix newMatrix = new Vektor2DMatrix(n);
for(int i=0;i<n;i++){
for (int j=0;j<n;j++){
??;
}
Nun fehlt mir bei ?? der Befehl.
Ich möchte die Matrix mit zufälligen Vektor2D-Eintragungen befüllen.
Ich bin mir auch nicht sicher mit was ich dann Math.random () multiplizieren soll.
Also:
Du willst eine Matrix, in der nicht einfach Zahlen stehen, sondern Objekte von Vektor2D.
Und ein Vektor 2D hat soweit ich weiß nur 2 Werte zu speichern (x, y). Also ein Tupel.
Dann erstelle doch im inneren der beiden For-Schleifen ein Vektor2D-Objekt und fülle es mit zufälligen Werten, mit Hilfe eines Random-Objektes, so:
Java:
Vektor2D einVektor = new Vektor2D();
Random randObject = new Random(100); // Nur Werte von 0 bis 99 generieren, oder wie du willst.
einVektor.setX(randObject.nextInt()); //.setX(), o.ä. muss als methode natürlich in
einVektor.setY(randObject.nextInt()); // Vektor2D implementiert sein, und einen Wert int füllen.
Jetzt musst du nurnoch an richtiger Stelle in deiner "newMatrix" das Objekt "einVektor" einfügen, das sollte jetzt ja im inneren deiner beiden for-Schleifen machbar sein, oder?
okay, habe ich nun so ähnlich gemacht.
Ich habe in vektor2D eine Methode: public static Vektor2D random()
programmiert, die einen zufällig Vektor wiedergibt.
Java:
public static Vektor2DMatrix random(int n){
Vektor2DMatrix newMatrix = new Vektor2DMatrix(n);
for(int i=0;i<n;i++){
for (int j=0;j<n;j++){
newMatrix [i][j]= Vektor2D.random();
return newMatrix;
}
Funktioniert aber nicht, da er in Zeile 5 ein array erwartet. Ich verstehe den fehler nicht!
public Vektor2DMatrix(int n){
matrix = new Vektor2D[n][n];
}
weist einer Klassen-Variable "matrix", das ein zweidimensionales Array von Vektor2D ist zu. D.h. du kannst zwar ein "newMatrix" Object erstellen, aber dann musst du nicht das Objekt selber mit einem Vektor2D überschreiben,
sondern: diese Klassenvariable "matrix", die zu deinem Objekt "newMatrix" gehört/untergeordnet ist .
Versuchs mal mit einem Zeile 5 Ersatz folgendermaßen:
Java:
newMatrix.matrix[i][j] = Vektor2D.random(); //deine Klassenvariable "matrix" muss hierfuer public sein
Nun soll ich noch eine Methode: public String toSTring() für die Darstellung der Matrix mit den Vektor2D einträgen schreiben.
Für die Vektor2D - Klasse habe ich solch eine Methode schon in der entsprechenden Vektor2D Klasse, die ich hier auch verwenden soll.
Diese sah so aus
Java:
public String toString() {
return "(" + x + "," + y + ")";
}
Mit zwei for-schleifen kann ich jedes Vektor2D-element der Matrix abklappern.
Abstand zwischen den SPalten mache ich mit Tabulator und in die neue Zeile kann ich mit \n gehen aber wie mache ich das mit dem STring?
Leider gibt Java mir so gar nicht eine schöne matrix aus.
Java:
public String toSTring(){
String s = "";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
s = s + "\t" + matrix[i][j];
}
s = s + "\n";
}
return s;
}
Leider gibt Java mir so gar nicht eine schöne matrix aus.
Java:
public String toSTring(){
String s = "";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
s = s + "\t" + matrix[i][j];
}
s = s + "\n";
}
return s;
}
Ich hätte eine Frage:
Warum gibt Java automatisch die Vektoren und Matrixen in der ensprechenden Darstellung in der Konsole aus ohne dass man die Methode toString() explizit dazuschreibt?
Also deine random()-Methode kann eine statische Methode in Vektor2DMatrix sein (gut), oder eine Objekt-/Instanzmethode in Vektor2DMatrix (eher schlecht), oder anstatt einer Methode ein spezieller Konstruktor in Vektor2DMatrix (gut), oder du kannst, anstatt eine Methode zu verwenden, Vektor2DMatrix innerhalb der Schleife erstellen (eher schlecht). Welche Möglichkeit wird denn jetzt von dir favorisiert?