FillMatrix

wil89

Mitglied
Liebe Forenmitglieder,
hallo , ich bin ein Java Einsteiger namens Wili, meine Frage ist,

ich will gerne 1 Matrix machen mithilfe Arrays,
ich habe 1 class Matrix mit 2 Konstruktoren, 1 mal das ,was symmetrische Matrizen erzeugt, u. anderer was Asymmetrisch.
Die Attribuete sind : M[][] als Speichermatrix, m u.n als 2 ints ,die Zeilen u. Spalten der Matrix symbolisieren.
Die Aufgabe lautet:

zwei void-Funktionen soll gemacht werden.

1.fillA(int k) fu¨llt Matrix so, dass zeilenweise erst k Mal die Zahl k, dann k+1 Mal die Zahl k+1, ,usw. auftreten.
2.fillB(int k, int l) geht von einem Wert l aus (k Betrag ist egal) und fuellt die Matrix so, dass zeilenw. gelesen die zykl. Folge k,k + 1,k + 2,...,k + l, DANN WIEDER k,k + 1,... wird.
Ich möchte Hints bekommen,was ich machen sollte, da ich komplett überfragt bin bei dieser Aufgaben.

ich weiß nur, dass es mit Zaehler zu tun hat.

Danke f. Rat ,Gruße,
Willi
 
Zuletzt bearbeitet:

knilch

Bekanntes Mitglied
Hi,
Wie ein Array der Grösse k mit int's erstellt wird wirst du sicher noch können...
Dann erstellst du eine Methode: fillA(int k) und dann wird k-mal iteriert (mit for-loop) und für jedes Element vom integer - Array ein Wert zugewiesen.

Für das Lesen von 2-D Arrays kannst du 2 for- loops einsetzten:
Java:
int[][] matrix = new int[10][5]; // array mit 5 colons und 10 rows
for(int i=0; i<matrix.length; i++) {        // iteration über jede row
   for(int j=0; j<matrix[0].length; j++) { // iteration über jede colon
      // mach hier was... System.printLn();
   }
}
 
Zuletzt bearbeitet:

wil89

Mitglied
Erst Danke , Knilch f.liebe Antwort!

Nun ich bin super Einsteiger , wo man muss langsamer eingehen bei mir, damit ich überhaupt verstehe : also
Zum Thema :
Was ich nicht ganz verstanden habe ist das Algorithmus (lies: ~wie ist die Matrix überhaupt implementiert ? :)von dieser fill 1 u. 2 Matrix,
Ich verstehe nur , dass bei 1). zB. Eingabe 2 , kommt die Ergebnis 2X2 Matrizen , aber wie kriege ich hin , dass zB. für 0. Zeile 0. Spalte 1 mal ein 1 habe ?

0 . Zeile 1. Spalte erste 2--> etwas bestimmt mit Zähler zu tun.
1. Zeile 0.Spalte zweite 2,
1 Zeile 1. Spalte erste 3, also muss ja eigentlich 3 3 also auf treten, aber es kommt 2 3er weg.
Kann man mich bitte so leiten ? Ich bin komplett überfragt .
Gruesse,
Willi.
 

knilch

Bekanntes Mitglied
Hi,
Sorry, aber ich hab echt Mühe zu verstehen, was du genau möchtest. Hast du irgendwo eine Aufgabe, die du lösen musst? Wenn ja, poste doch die ganze Aufgabe, genau so wie du sie erhalten hast. Sonst kann ich mit deinen "Aussagen" leider nicht viel anfangen...
 

wil89

Mitglied
Mein Professor hat mich ausdrücklich verboten , dass ich irgendwas kopiere v. seiner Vorlesung u. auf diesem Forum poste. Also dann musst du etwas Geduld mit mir, der diesen Satz versucht umzuformulieren.
"Ok ?:)So:
Wir haben die Klasse MyMatrix.java, der Objekt dieser Klasse soll immer solche Eigenschaft o. Attribuete haben :
2 ints- Werte m und n als Repraesentanten von Zeilenanzahl , n Spaltenanzahl,

diese Klasse beinhalten auch Methoden, die wir implemmentieren muessen u. 2 Konstruktoren
: einmal MyMatrix (int n) zum Machen von quadratischen Matrizen, und MyMatrix (int m, int n) von nicht quadratischen Matrizen.

verstehst du bis dahin?
 

knilch

Bekanntes Mitglied
Ok,
Wir haben die Klasse MyMatrix.java, der Objekt dieser Klasse soll immer solche Eigenschaft o. Attribuete haben :
2 ints- Werte m und n als Repraesentanten von Zeilenanzahl , n Spaltenanzahl,

diese Klasse beinhalten auch Methoden, die wir implemmentieren muessen u. 2 Konstruktoren
: einmal MyMatrix (int n) zum Machen von quadratischen Matrizen, und MyMatrix (int m, int n) von nicht quadratischen Matrizen.
verstehst du bis dahin?
Soweit mal ok.
Hier mal ein Beispiel dazu:
Java:
public class MyMatrix {
	
	private int m;
	private int n;
	
	private int [][] matrixArray;
	
	
	public MyMatrix(int n) {
		this.n = n;
		this.m = n;
		matrixArray = new int[n][n];
	}
	
	public MyMatrix(int m, int n) {
		this.m = m;
		this.n = n;
		matrixArray = new int[m][n];
	}
	
	public int[][] getMatrix() {
		return matrixArray;
	}
	
	public void fillA(int k) {
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				matrixArray[i][j] = k++;
			}
		}
	}
	
	public void fillB(int k, int l) {
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
			// was genau soll fillB machen...
			}
		}
	}
}
Was nun mit dieser Methode fillB() gemacht werden soll, ist mir nicht klar...kannst du das noch besser erklären, wie die Ausgabe vom Array aussehen soll, wenn sie mit fillB gefüllt wurde.
Ob die fillA Methode so richtig ist, kann ich nicht sagen, da ich nicht genau sehen kann, wie die Matrix aussehen wird, wenn die Matrix mit dieser Methode gefüllt wurde.
Testen kannst du dies mit
Java:
public static void main(String[] args) {
	MyMatrix myMatrix = new MyMatrix(10,5);
	myMatrix.fillA(4);
	
	int[][] matrix = myMatrix.getMatrix();
	
	for (int i = 0; i < matrix.length; i++) {
		for (int j = 0; j < matrix[0].length; j++) {
			System.out.print(matrix[i][j] + ", ");
		}
		System.out.println();
	}
}
 
Zuletzt bearbeitet:

wil89

Mitglied
Du bist der tollste! :toll:

Z"itat"

fillA(int k) geht von nem +k aus
und fu¨llt die Arrays so, dass zeilenweise erst k Mal die Zahl k, dann k+1 Mal die Zahl k+1, usw. auftreten.

Die Methode fillB(int o, int p) geht von + p aus (o ist beliebig) und fu¨llt die Matrix so, dass zeilenweise gelesen die wiederholende Folge p,p + 1,p+2,...,p + o,p,p + 1,... entsteht."

PS:
Sorry für deine meinetwillen Zeitverschwendung----

lg Wil89
 

knilch

Bekanntes Mitglied
Hi,
fillA(int k) geht von nem +k aus
und fu¨llt die Arrays so, dass zeilenweise erst k Mal die Zahl k, dann k+1 Mal die Zahl k+1, usw. auftreten.
In etwa in dieser Art: für k=4
Ausgabe:
4,4,4,4
5,5,5,5,5
6,6,6,6,6,6
7,7,7,7,7,7,7
Wenn ja, wie lange? soviel Zeilen wie in Variable m (oder n wenn quadratisch) zugewiesen wird?

Die Methode fillB(int o, int p) geht von + p aus (o ist beliebig) und fu¨llt die Matrix so, dass zeilenweise gelesen die wiederholende Folge p,p + 1,p+2,...,p + o,p,p + 1,... entsteht."
Kannst du ein Beispiel posten, wie die Ausgabe mit o = 4 und p = 5 bei einer Matrix[5][6] aussieht?
 
Zuletzt bearbeitet:

wil89

Mitglied
hallo erstmal.

Zitat :
In etwa in dieser Art: für k=4
Ausgabe:
4,4,4,4
5,5,5,5,5
6,6,6,6,6,6
7,7,7,7,7,7,7

Ich meine, dass es kein Matrix ist.
Vielmehr :
4x4 Matrix ,16 Eintraege

4,4,4,4,
5,5,5,5,
5,6,6,6,
6,6,6,7,

andere (7,7,7,7,7,7) ,die auftreten , muessen weg sein.


fuer die fillB, wird bei Eingabe 2 u. 3 ein 2 x 3 Matrix erzeugt, mit (2+3 = 5) als letztes, was auftreten kann:

2,3,4
5,2,3
lg
wil89
 

wil89

Mitglied
Also Knilch,
Wie hast du diese Aufgabe interpretiert ?
Danke für den Rat .Es gibt nicht viele Leute , die mit mir geduldig sind.

Lg.
Wili.
 

knilch

Bekanntes Mitglied
Hi,
hier ist mal eine Idee.
Java:
/**
 * 4x4 Matrix ,16 Eintraege
 * 4,4,4,4,
 * 5,5,5,5,
 * 5,6,6,6,
 * 6,6,6,7, 
 * @param k
 */
public void fillA(int k) {
	matrixArray = new int[k][k];
	int count = 0;	
	/*
	 * count:
	 * zählen wieviel mal k schon benutzt wurde
	 * Wenn count == k ist: 
	 *  - count=0;
	 *  - k++;
	 */
	for (int i = 0; i < matrixArray.length; i++) {
		for (int j = 0; j < matrixArray[0].length; j++) {
			if(count == k) {
				count = 0;
				k++;
			}
			matrixArray[i][j] = k;
			count++;
		}
	}
	
}

/**
 * fuer die fillB, wird bei Eingabe 2 u. 3 ein 2 x 3 Matrix erzeugt, mit (2+3 = 5) als letztes, was auftreten kann:
 * 2,3,4
 * 5,2,3
 * @param k
 * @param l
 */
public void fillB(int k, int l) {
	matrixArray = new int[k][l];
	int sum = k+l;
	int tmp = k;
	for (int i = 0; i < matrixArray.length; i++) {
		for (int j = 0; j < matrixArray[0].length; j++) {
			matrixArray[i][j] = k;
			if(sum == k++) {
				k = tmp;
			}
		}
	}
}
Die beiden Methoden geben bei den Parameter die du angegeben hast die Resultate:
Code:
fillA(4):
4, 4, 4, 4
5, 5, 5, 5
5, 6, 6, 6
6, 6, 6, 7
fillB(2,3)
2, 3, 4
5, 2, 3
Um zu verstehen, wie diese Ausgabe nun erstellt wird, solltest du den Code mal genau studieren und verstehen, was da genau passiert. Denn nur mit Copy & Paste verstehst du den Zusammenhang nicht.. ;-)
Allerdings:
Wenn bei fillA(int k) und fillB(int k, int l) benutzt wird und vorher eine Instanz mit public MyMatrix(int n) oder public MyMatrix(int n, int m) erstellt wurde, ist das int Array: matrixArray dass mit den beiden Konstrutoren erstellt wird nicht mehr gültig, da mit fillA und fillB ein neues matrixArray erstellt wird.

Hier die ganze Klasse:
Java:
public class MyMatrix {

	private int m;
	private int n;

	private int [][] matrixArray;


	public MyMatrix(int n) {
		this.n = n;
		this.m = n;
		matrixArray = new int[n][n];
	}

	public MyMatrix(int m, int n) {
		this.m = m;
		this.n = n;
		matrixArray = new int[m][n];
	}

	public int[][] getMatrix() {
		return matrixArray;
	}

	/**
	 * 4x4 Matrix ,16 Eintraege
	 * 4,4,4,4,
	 * 5,5,5,5,
	 * 5,6,6,6,
	 * 6,6,6,7, 
	 * @param k
	 */
	public void fillA(int k) {
		matrixArray = new int[k][k];
		int count = 0;	
		/*
		 * count:
		 * zählen wieviel mal k schon benutzt wurde
		 * Wenn count == k ist: 
		 *  - count=0;
		 *  - k++;
		 */
		for (int i = 0; i < matrixArray.length; i++) {
			for (int j = 0; j < matrixArray[0].length; j++) {
				if(count == k) {
					count = 0;
					k++;
				}
				matrixArray[i][j] = k;
				count++;
			}
		}

	}

	/**
	 * fuer die fillB, wird bei Eingabe 2 u. 3 ein 2 x 3 Matrix erzeugt, mit (2+3 = 5) als letztes, was auftreten kann:
	 * 2,3,4
	 * 5,2,3
	 * @param k
	 * @param l
	 */
	public void fillB(int k, int l) {
		matrixArray = new int[k][l];
		int sum = k+l;
		int tmp = k;
		for (int i = 0; i < matrixArray.length; i++) {
			for (int j = 0; j < matrixArray[0].length; j++) {
				matrixArray[i][j] = k;
				if(sum == k++) {
					k = tmp;
				}
			}
		}
	}

	public void printMatrix() {
		for (int i = 0; i < matrixArray.length; i++) {
			for (int j = 0; j < matrixArray[0].length; j++) {
				System.out.print(matrixArray[i][j]);
				if(j < matrixArray[0].length-1) {
					System.out.print(", ");
				}
			}
			System.out.println();
		}
	}
}
und zum Testen:
Java:
public class MyMatrixTest {

	public static void main(String[] args) {
		MyMatrix myMatrix = new MyMatrix(5);
		myMatrix.fillA(4);
		myMatrix.printMatrix();
		
		System.out.println();
		
		myMatrix.fillB(2,3);
		myMatrix.printMatrix();
	}

}
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben