OOP Ideen für Matrizendurchlauf

Dr.Ikarus

Mitglied
Hallo zusammen,
ich habe eine mehr oder weniger komplexe Frage.

Erstmal zu meiner Klasse:
Die Klasse Buschmatrix erstellt eine Matrix, bei der alle Zahlen der Matrix 3 verschiedene Stati annehmen können. 1 oder 2 oder 3.
Wenn eine Zahl eine 1 hat passiert nix, wenn eine Zahl eine 2 wird, dann sollen, die Zahlen die rechts, links, über und unter der Zahl stehen, im nächsten Schritt auch auf den Wert 2 geändert werden, sich also wie ein Buschfeuer in alle 4 Himmelsrichtungen ausbreiten.
Hier ist die Klasse:
Java:
public class Buschmatrix implements intmatrixIF{

	public int rows;
	public int columns;
	public int[][] a;
	
	public Buschmatrix (int x, int y){ 	//Konstruktor mit zwei Übergabeparametern
		rows=x;							// Konstruktor ist eine spezielle Methode, die ein Objekt der Klasse erstellt(hat immer den Namen der Klasse)
		columns=y;
		a= new int[rows][columns];
		}
	
	@Override
	public int columns() {
		// TODO Auto-generated method stub
		return this.columns;
	}

	@Override
	public int get(int i, int j) {
		//if (i >= 0 && j >= 0)
		return a[i][j];
	}


	@Override
	public int rows() {
		return this.rows;
}

	@Override
	public void set(int i, int j, int value) {
		a[i][j]= value;
	
}

	@Override
	public void print() {
		for(int i = 0; i < rows; i++) {
	          for(int j = 0; j < columns; j++) {
	               System.out.print(a[i][j]+" ");
	          }
	          System.out.println("");
	          }
		
	}

//Status 1 = Normalzustand, Status 2 = Feuer, Status 3  = Erholung, Status 0 = kein Nachbar

public void change (int i, int j){
	int left;
	int right;
	int up;
	int down;
	int current;
	
	// Statusvariablen befüllen
	current = get(i, j);
	if (i > 0)
		up = get(i-1, j);
	else up = 0;
	if (i < rows-1)
		down = get (i+1, j);
	else down = 0;
	if (j>0)
		left = get (i, j-1);
	else left = 0;
	if (j < columns-1)
		right = get (i, j+1);
	else right = 0;

	
	//normal in brennende
	 
	if (current == 1){
		if (left == 2)a[i][j]  = 2;
		if (right == 2)a[i][j]  = 2;
		if (up == 2)a[i][j]  = 2;
		if (down == 2)a[i][j]  = 2;
	}
	
	//brennende zelle in erholung
	else if (current == 2)a[i][j] = 3;
	
	
	//Erholung in Normal
	else if (current == 3)a[i][j] = 1;
	
}
	public void update(){
		for(int i = 0; i < rows; i++) {
	          for(int j = 0; j < columns; j++) {
	              change(i,j);
	          }
		}	
	}


Ausgegeben wird das ganze dann folgendermaßen:
Java:
package matrizen;

public class Brand {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Buschmatrix Busch = new Buschmatrix(5, 7); // Hier wird der Konstruktor aufgerufen
		for(int i = 0; i < Busch.rows; i++) {
	          for(int j = 0; j < Busch.columns; j++){ 
	        	  Busch.set(i, j, 1);
		}}
		
		Busch.set(3, 3, 2);
		Busch.print();
		System.out.println();
		Busch.update();
		Busch.print();
		System.out.println();
		Busch.update();
		Busch.print();
		System.out.println();
		
	}

}

So.
Das Problem an dieser ganzen Sache ist folgendes:

Wenn eine Zahl eine 2 wird, dann ändert sich nicht nur der Zustand der anliegenden Zahlen. Durch die Schleife werden alle folgenden Zahlen direkt konvertiert und dass soll eigentlich vermieden werden.
Wenn ich das, so wie es jetzt ist, ausführe, passiert folgendes:


Code:
1 1 1 1 1 1 1 
1 1 1 1 1 1 1 
1 1 1 1 1 1 1 
1 1 1 2 1 1 1 
1 1 1 1 1 1 1 

1 1 1 1 1 1 1 
1 1 1 1 1 1 1 
1 1 1 2 2 2 2 
1 1 2 3 2 2 2 
1 1 2 2 2 2 2 

1 1 1 1 1 1 1 
1 1 1 2 2 2 2 
1 1 2 3 3 3 3 
1 2 3 1 3 3 3 
1 2 3 3 3 3 3

Im ersten Schritt wird eine 2 eingefügt, im zweiten Schritt werden alle nachfolgenden Zahlen in der Zeile ebenfalls geändert, obwohl nach unserer Überlegung nur die 4 anliegenden geändert werden sollen.


Gibt es eine Möglichkeit, das zu begrenzen oder einzudämmen. Muss ich eventuell die ganze Klasse umschreiben?
Ich wäre für Tipps wirklich dankbar.

Vielleicht sollte ich noch hinzufügen, dass dieses "Buschfeuer" später über eine GUI präsentiert werden soll, falls jemandem der Sinn dieser Idee fehlt.

Hoffe das ist alles klar, wenn nicht, versuche ich das nochmal anders zu erklären.

Danke!!
 

Andi_CH

Top Contributor
Wie/warum wird die erste Zahl zu 2?
Wie/warum wird sie zu 3?
In welchen Zeitraster (und das wird es ja wohl geben müssen) pflanzt sich denn dein Buschbrand fort?

Fragen über Fragen und keine hat mit Java zu tun :-(

Deinen Code habe ich nicht angeschaut, denn erst sollte das Problem klar rüber kommen!

Aber vielleicht könnte das dein Problem sein:

Ich betrachte es der einfachheit halber 2 Dimensional:

Ausgangslage
112111

der Loop geht bis zur Position 2 -> Der Wert ist zwei -> der Regel entsprechend wir Position 1 und 3 auf zwei gesetzt
122211
Position 3 -> der Wert ist 2, also werden Position 2 und 4 auf 3 gesetzt
122221
Position 4: blabla wie oben :)
122222

Ist das dein Problem?

Lösung: Ein unabhägnige Resultatmatrix führen und am Schluss als ganzes umkopieren
Ausganslage 112111
Resultat 112111 (Kopie von Ausgangslage)

Loop geht bis 2
Ausganslage 112111
Resultat 122211
und bei 3 steht ja wieder eine 1. also geschieht nichts .....


Dann umkopieren

Ausgangslage 122211
 
B

bygones

Gast
fuer was ist denn die 3 ?

wenn die bedingung ist: ist feld x = 2, dann alle aussenrum auch 2, dann hast du eine kettenreaktion und deine Matrix ist nahezu sofort voller 2er, je nach größe eben in untersch. Schneller.

wollt ihr nun nur die umliegenden beachten und nicht die noch weiter ? oder wie ?
 

ARadauer

Top Contributor
wie beim spiel des lebens...
ich hab mirs jetzt nicht im detail angeshehen, aber ich denke das problem ist, das du beim update von späteren zellen schon auf die änderung der ersten reagierst... ich denke beim jedem druchlauf soll sich das feld auf einmal ändern. das heißt du duplizierst dein array, schreibst beim update/change alle änderungen aufgrund vom ersten ins zweite und wenn du fertig bist überschreibst du das erste mit dem zweiten...
 

Dr.Ikarus

Mitglied
fuer was ist denn die 3 ?

wenn die bedingung ist: ist feld x = 2, dann alle aussenrum auch 2, dann hast du eine kettenreaktion und deine Matrix ist nahezu sofort voller 2er, je nach größe eben in untersch. Schneller.

wollt ihr nun nur die umliegenden beachten und nicht die noch weiter ? oder wie ?


Es ist am Ende so gedacht, dass man mit einem Mausklick auf ein Feld in der Matrix klickt und dieses Feld dann den Status ändert.
Und dann soll das ganze über einen Button weiter gehen.
Also so:
1. Mit Mausklick den Status einer Zahl von 1 zu 2 wechseln.
2. Mit einem Button Klick werden die umliegenden Felder (nur die Felder die über, unter, rechts und links vom aktuellen Feld sind) von 1 auf 2 getauscht und das Feld mit der 2 geht in Status 3 über.
3. Nächster Button Klick und alle Felder die neben einem brennenden Feld, also einer 2 liegen werden ebenfalls zu einer 2, die Zahlen die eine 2 sind werden zu einer 3.

Also nicht über einen Timer, sondern über einzelne Button KLicks soll das gelöst werden.
Die Zahlen werden dann später auf der GUI in Farben dargestellt, aber das ist ja erstmal nebensächlich.

Hoffe das erklärt alles ein bisschen besser
 
Zuletzt bearbeitet:
B

bygones

Gast
anfangs hast du eine liste die ist leer, sie speichert die indixes der Felder mit 2.

Dann ändert jmd durch den Klick ein Feld auf 2. Der Index des Felds kommt in die Liste

Beim erneuten Buttonklick läufst du durch die liste und setzt a) das Feld mit dem index auf 3 und alle umliegenden Felder auf 2. Diese neuen indixes speicherst du dir und am ende des laufs fügst du alle neuen 2 in deine liste - und dann wieder von vorn
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Ideen für kleinere Projekte um Java zu lernen Java Basics - Anfänger-Themen 1
A Best Practice Ideen für kleines Anfängerschulprojekt gesucht Java Basics - Anfänger-Themen 4
W Habt ihr Ideen für ein Einsteiger? :) Java Basics - Anfänger-Themen 4
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
C Ideen für eine Schularbeit mit J++ Java Basics - Anfänger-Themen 13
A Habt ihr ein paar ideen für Programme? Java Basics - Anfänger-Themen 8
Floker Ideen für Konsolenprogramme um Java zu lernen Java Basics - Anfänger-Themen 9
Z Programm Ideen Java Basics - Anfänger-Themen 8
L Performanceverbesserung: Ideen? Java Basics - Anfänger-Themen 1
D Irgendwelche Ideen um Zahlen Reihenfolgen zu analyisieren Java Basics - Anfänger-Themen 16
A Methoden Gedanken Anstöße zur Realisierung zweier Ideen (Grafisch Sekunden zählen und Frameaufteilung) Java Basics - Anfänger-Themen 18
D Ideen zu RSA Java Basics - Anfänger-Themen 2
B Suche Anfänger Projekt-Bitte um Ideen Java Basics - Anfänger-Themen 9
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
G Icon für App Java Basics - Anfänger-Themen 1
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
M generate Methode für Streams Java Basics - Anfänger-Themen 6
I Datenmodell für "Tags" Java Basics - Anfänger-Themen 6
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
javamanoman Java für Online Banking Java Basics - Anfänger-Themen 12
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
T getMethode für ein Array Java Basics - Anfänger-Themen 2
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
N Api nur für Textdatein (.txt) Java Basics - Anfänger-Themen 2
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
E Mittelquadratmethode für Hexadezimalzahlen Java Basics - Anfänger-Themen 1
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
L Konzept für Quiz Java Basics - Anfänger-Themen 33
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
U BestPractise für Deployment unter Windows gesucht Java Basics - Anfänger-Themen 12
lilrack UML Diagramm für Parkplatzverwaltung Java Basics - Anfänger-Themen 8
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
T Alternative für switch case Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben