Matrixberechnung

L

Lisachen

Gast
Hey!
Ich soll eine Klasse MyMatrix Programmieren, die die wichtigsten Rechenoperationen kann... ich komm leider nur so weit:

Java:
public class Matrix {
	private int m;
	private int n;
	private int [][] matrix = new int [m][n];
	
	public Matrix(int n){
		
	}
	
	
}

Folgendes soll ich machen

1. Konstruktor für eine n*n Matrix
public MyMatrix(int n)

2. Constructor für eine rows * cols Matrix
public MyMatrix(int rows, int cols)

3. Zufallsmatrix, statische Methode, die eine Matrix generiert
public static MyMatrix random(int)

4.
5.
...

Ich schaff nicht mal leider nicht mal das... Bitte um Hilfe!!!!
 

eRaaaa

Top Contributor
Hey!
Ich soll eine Klasse MyMatrix Programmieren, die die wichtigsten Rechenoperationen kann... ich komm leider nur so weit:

Java:
public class Matrix {
	private int m;
	private int n;
	private int [][] matrix = new int [m][n];
	
	public Matrix(int n){
		
	}
	
	
}

Folgendes soll ich machen

1. Konstruktor für eine n*n Matrix
public MyMatrix(int n)

2. Constructor für eine rows * cols Matrix
public MyMatrix(int rows, int cols)

3. Zufallsmatrix, statische Methode, die eine Matrix generiert
public static MyMatrix random(int)

4.
5.
...

Ich schaff nicht mal leider nicht mal das... Bitte um Hilfe!!!!

Zeile 4 streich mal so, bzw lasse mal alles hinter dem "=" wegfallen ^^ (bis aufs Semikolon)
Du kennst zu dem Zeitpunkt ja dein m und/oder n noch gar nicht, das Initialisieren sollst du in den Konstruktoren machen.
Dort bekommst du ja einmal ein "n" übergeben, da es eine nxn Matrix werden soll, kannst du dann also dort deine Matrix/Array initialisieren mit
Code:
matrix = new int[n][n];
Bei dem zweiten Konstruktor das selbe nur halt mir rows und cols.(n und m)

Zu deinem dritten Punkt: Zufallszahlen kannst du mit Hilfe der Klasse Random generieren lassen. Wie man ein Array mit einer Schleife durchläuft und Werte zuweist solltet ihr schon gelernt haben, ansonsten kann man das auch schnell nachlesen !
 
L

Lisachen

Gast
hmhm vielen Dank, aber irgendwie glaub ich, hab ich das Prinzip nicht ganz verstanden.. was für zählen geb ich jetzt immer ein?? die Werte bei einer gewissen array-Stelle, oder die anzahl der reihen und spalten??
ich hab das jetzt soweit mal so, aber das stimmt so sicher nicht =(

Java:
public class Matrix {
	private int m;
	private int n;
	private int [][] matrix;
	
	public Matrix(int n){
		this.m = n;
		this.n = n;	
	}
	
	public Matrix(int rows, int cols){
		this.m = rows;
		this.n = cols;
	}
	public static Matrix random (int n){
		int a = (int) Math.random();
	}

}
 

crackm

Mitglied
Die Anzahl der Zeilen und Spalten muss überegeben werden
Deinem Konstruktor nach die Anzahl der Zeilen und Spalten da hast du schon recht.
Bei beiden Konstruktoren kannst du den Array schon erzeugen.
Java:
matrix = new int [rows][cols];
bzw eben das entsprechende für die quadaratische Matrix.
Tipp: guck dir an was this ist
Java:
public Matrix(int rows, int cols){
        this.m = rows;
        this.n = cols;
    }
in diesem Konstruktor haben die nicht wirklich was verloren.
Java:
public static Matrix random (int n){
        int a = (int) Math.random();
    }
was soll diese Funktion tun?
Das Erzeugen von einer Matrix mit Zufallszahlen bräuchte ein paar mehr Zeilen.
Java ist Casesensative, wieso willst du hier eine Klasse zurückgeben ?
 
Zuletzt bearbeitet:

Suinos

Bekanntes Mitglied
Eine Matrix kannst du dir auch als Tabelle vorstellen.
Du hast Zeilen und Spalten, und die einzelnen Zellen haben einen Wert, eine Zahl.

Code:
			Spalte	0	1	2	3	4
		Zeile
		0		73	1	23	11	6
		1		0	42	2	93	21
		2		6	0	8	3	68

In deinen Konstruktoren musst du nur das Grundgerüst erstellen:
  • Zeilenanzahl
  • Spaltenanzahl
  • Standard-Werte der Zellen

In deinem ersten Konstruktor
Code:
public Matrix(int n)
sind die Zeilenanzahl und Spaltenanzahl gleich gross, im zweiten
Code:
public Matrix(int rows, int cols)
sind sie variabel (dies hast du auch richtig gemacht).
Was jetzt noch fehlt ist die Initialisierung des Arrays:
Java:
matrix = new int[zeilenanzahl][spaltenanzahl];
Die Standard-Werte sind in einem int-Array immer 0. Dies können wir also erstmals so lassen.

Bei deiner statischen Methode
Code:
public static Matrix random (int n)
stellen sich folgende Fragen:
  • Was soll der Parameter bedeuten?
  • Soll es eine quadratische Matrix sein?
Als kleines Grundgerüst:
Java:
public static Matrix random(int n)
{
	// in der API nachlesen welche Methoden hiervon nützlich sind!
	Random rand = new Random();
	
	int rows;
	int cols;
	
	// Logik für die Berechnung der Zeilen & Spalten hier einfügen
	
	return new Matrix(rows, cols);
}
 
L

Lisachen

Gast
Ich finde es wirklich witzig wie Fragen in einem Forum mittels meines Nicknames intrepretiert werden ^^ sry mir ist keine männlichere Form von Lisa eingefallen.. Lustig, dass ich mir angeblich die Lösungen erschleiche.. würde ich das tun könnte ich einfach die Lösungen der Beispiele kopieren, da immer irgendwelche Leute sie on stellen.. nur hab ich darauf keine Lust, sondern möchte es lieber selber (bzw. mit Hilfe von anderen) machen und verstehen.. Würde ich außerdem nur die Lösung wollen, würde ich jetzt die gesamte Angabe posten und ohne eigenen Ansatz erwarten, dass man es mir vorrechnet und erklärt.. nagut, egal, hab jetzt viel zu viel Zeit verschwendet auf das hier einzugehen, anstatt es z.b. für programmieren zu nützen..

Danke für die Antwort der anderen!

also ich hab das ganze jetzt umgearbeitet..

Java:
public class Matrix {

	private int m;
	private int n;
	
	public Matrix(int m, int n){
		double [][] matrix = new double [m][n];
		}
	
	public Matrix(int n){
		this(n,n);
	}
	
	public static Matrix random (int n){
		double [][] a = new double [n][n];
		
		for (int i = 0; i < n; i++){
			for (int j = 0; j < n; j++){
				a[i][j] = Math.random();
			}
		}
		
		return new Matrix(n, n);
	}
}

Ich habe mir auch eine neue Klasse mit einer Main-Methode gemacht um das ganze zu testen, aber was muss ich dafür eingeben um z.b. eine 3 X 2 Zufalls Matrix zu bekommen?

Ich hab folgendes:

Java:
public class Matrixausgabe {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Matrix b = new Matrix (3, 2);
		System.out.println(b);
	}

}

Aber wo könnte ich das random einfügen??
 

Suinos

Bekanntes Mitglied
1. Was genau soll die Methode
Code:
public static Matrix random (int n)
denn machen?
Was du jetzt machst ist:
- Einen Array
Code:
double[n][n]
mit zufälligen Werten von 0.0 bis 1.0 füllen und dann ignorieren.
- Eine Matrix mit
Code:
n
Spalten und Zeilen zurückgeben.

2.
Java:
public Matrix(int m, int n){
        double [][] matrix = new double [m][n];
        }
Code:
matrix
muss eine Instanzvariable sein, damit sie nachher verwendet werden kann.
Dies hattest du vorher doch schon?
Java:
private int [][] matrix;

3.
Java:
private int m;
private int n;
Diese Variablen werden momentan gar nicht verwendet.
Entweder, du entfernst diese ganz, und ermittelst die Zeilen- und Spaltenanzahl über den Array, wenn du diese Werte brauchst,
Java:
int rows = matrix.length;
int cols = matrix[0].length;
oder du setzt sie im Konstruktor wie vorher.

Die zweite Variante macht mehr Sinn, wenn die Zeilen- und Spaltenanzahl einer Matrix immer gleich bleiben soll.
(Wenn du nicht gegenläufige Anweisungen hast, würde ich dies auch empfehlen.)

--

Zusätzlich empfehle ich, deine Namensgebungen immer so aussagekräftig wie möglich zu setzen (ohne dass die Länge extrem wird :p).

Zum Beispiel sagen die Variablen
Code:
m
und
Code:
n
momentan gar nichts aus.
Mit
Code:
rows
und
Code:
cols
(oder
Code:
columns
, je nach Geschmack, aber bitte nicht
Code:
columnsOfThisMatrix
) erkennt aber jeder (also auch du in einer Woche, oder andere Entwickler jetzt) was damit gemeint ist.
 

Oben