2D-Array ohne Grenzen

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo,

ich schreibe grad ein Programm, bei dem ich ein Spielfeld ohne Grenzen haben möchte. Soll heißen, wenn ich z.B. an die rechte Begrenzung stoße, kommt man von links auf derselben Höhe wieder ins Spielfeld rein. Nur bei mir kommt immer die ArrayOutOfBoundsException.

Ich habe 2 Arrays, die ich in 2 verschachtelten For-Schleifen bearbeite etc.
Den folgenden Abschnitt wollte ich nun dazu benutzen, die Wände "aufzuheben" (2 Arrays x 4 Richtungen = 8 Zeilen)
Wie mach ich sowas?

Code:
for(int i=0;i<hoehe;i++)
{
	for(int j=0;j<breite;j++)
	{	

               symbole[-1][j] = symbole[hoehe-1][j];
               energieFische[-1][j] = energieFische[hoehe-1][j];
               symbole[hoehe][j] = symbole[0][j];
               energieFische[hoehe][j] = energieFische[0][j];
               symbole[i][-1] = symbole[i][breite-1];
               energieFische[i][-1] = energieFische[i][breite-1];
               symbole[i][breite] = symbole[i][0];
               energieFische[i][breite] = energieFische[i][0];


               [...]

Danke & Gruß
DSOA
 

The_S

Top Contributor
Sowas wie

Code:
if (i >= symbole.length) {
   i = 0;
}
else if (i < 0) {
   i = symbole.length - 1;
}
if (j >= symbole[i].length) {
   j = 0;
}
else if (j < 0) {
   j = symbole[i].length - 1;
}
 

babuschka

Top Contributor
Nehmen wir mal folgenden Ausschnitt aus meinem Quelltext
Code:
for(int i=0;i<hoehe;i++)
		{
			for(int j=0;j<breite;j++)
			{	
				//Jede Position wird auf das Vorhandensein eines Fisches untersucht
				if(symbole[i][j] == '.')
				{
					//Es wird geprueft, ob eines der 4 angrenzenden Felder leer ist
					if(symbole[i-1][j] == ' ' || symbole[i][j+1] == ' ' || symbole[i+1][j] == ' ' || symbole[i][j-1] == ' ')
					{

Ich habe einen Ozean, der mit Fischen gefüllt ist (char symbole[][]). Wenn in diesem Ausschnitt ein Fisch auf einem Feld des Ozeans erkannt wurde, dann wird geguckt, ob eines der 4 Nachbarfelder leer ist, damit der Fisch da evtl. hinwandern kann. Und an diesem Punkt stoße ich immer über die Grenzen des Arrays hinaus.

Das Problem, das ich mit Hobbits Lösungsversuch habe ist, dass ich nicht weiß, wo ich das oder sowas ähnliches hinschreiben könnte. Vor der Zeile
Code:
if(symbole[i-1][j] == ' ' || symbole[i][j+1] == ' ' || symbole[i+1][j] == ' ' || symbole[i][j-1] == ' ')
ist ja noch alles in Ordnung und in der Zeile tritt ja die ArrayIndexOutOfBoundsException auf, so dass es nichts bringen wird, es noch nach der zeile hinzuschreiben...

Will doch nur, dass meine Fischis vom Rand des Ozeans auf die gegenüberliegende Seite kommen :(
 

Ark

Top Contributor
Modulo.

Modulo. Modulo. Modulo.

Modulo?

Modulo!!

… Kapiert?! :cool:

BTW: Das klingt nach WaTor …

Ark
 

babuschka

Top Contributor
Yo, Wator ;)

Also Wildcard hatte ja auch schon Modulo gesagt nur ich kann mir einfach nich vorstellen, wie ich da Modulo anwenden soll... vielleicht ists eben auch nur ne Denkblockade und ich steh etwas geistig im Nebel ^^ helft mir bitte, wie muss ich das mit Modulo schreiben, dass es geht...
 

Ark

Top Contributor
Mal so ein Tipp:

Stell Dir vor, die Uhr zeige nicht Stunden von 1 bis 12, sondern Stunden von 0 bis 11. Die Zeit kann verstreichen, wie sie will (also etwa zeit++); die Uhr würde, egal wie spät es ist, immer die Zeit modulo 12 anzeigen …

Sind jetzt alle Klarheiten beseitigt?! :D

MfG
Ark
 

babuschka

Top Contributor
Hei cool, also ich hab das Prinzip verstanden aber bekomme es nur zur Hälfte hin, aus folgendem Grund:

Wenn ich nicht wie bisher
Code:
for(int i=0;i<hoehe;i++)
	{
		for(int j=0;j<breite;j++)
		{	
                         symbole[i+1][j]
sondern
Code:
for(int i=0;i<hoehe;i++)
	{
		for(int j=0;j<breite;j++)
		{	
                         symbole[(i+1)%hoehe][j]
schreibe, dann klappt das (für i = hoehe-1), dass anstelle eines Wertes, der irgendwann mal um eins zu hoch ist, durch den Modulo nun 0 erscheint, also genau gegenüber des Feldrandes.

Doch was ist z.B. mit
Code:
for(int i=0;i<hoehe;i++)
	{
		for(int j=0;j<breite;j++)
		{	
                         symbole[(i-1)%hoehe][j]
(für i = 0) ??? Dann steht da im Prinzip
Code:
symbole[-1][j]
am Ende und der Modulo hat mir nichts gebracht...

Vielleicht wieder ein Rätsel? :D Würde aber auch ne klare Antwort akzeptieren ;)
 

babuschka

Top Contributor
Kann mir denn keiner weiterhelfen?? Also nochma:

Wenn ich nen 2D-Array als Ozean nehme und meine Fische nach links oder oben gegen die "Wand" gegenstoßen, das sie dann auf der gegenüberliegenden Seite wieder in den Ozean reinkommen... Wie mach ich das?

rechts und unten klappt ja schon, da schreib ich z.B. für unten:
Code:
symbole[(i+1)%20][j]
(symbole[][] enthält meine Fische und in dem Bsp. hat der Ozean die Höhe 20)

Aber bei links und oben klappt das mit dem Modulo nich oder bin ich einfach nur blind? ^^
 

Leroy42

Top Contributor
Schreibe statt:

Code:
symbole[(i-1)%hoehe][j]

Code:
symbole[(i-1+hoehe)%hoehe][j]
 

babuschka

Top Contributor
Durch einen anderen Fehler konnte ich erst jetzt testen ob es funktioniert... Nunja, ich habe jetzt
Code:
//Es wird geprueft, ob eines der 4 angrenzenden Felder leer ist
if(symbole[(i-1+hoehe)%hoehe][j] == ' ' || symbole[i][(j+1%breite)] == ' ' || symbole[(i+1)%hoehe][j] == ' ' || symbole[i][(j-1+breite)%breite] == ' ')
geschrieben und rein mathematisch gesehen kommt man ja so von einem Rand des 2D-Arrays auf die gegenüberliegende Seite, wenn man den Rand überschreiten sollte aber es kommt trotzdem mal wieder eine ArrayIndexOutOfBoundsException und zwar genau wieder in dieser Zeile... Ich versteh einfach nich warum, das passt doch eigentlich alles super oder!?
 

babuschka

Top Contributor
Wieso sagt der Compiler mir, dass ich in dieser Zeile die Grenze des Arrays überschreite? Ich versteh das nich :bahnhof:
 

babuschka

Top Contributor
Fehler gefunden...

Falsch:
Code:
symbole[i][(j+1%breite)] == ' '
Richtig:
Code:
symbole[i][(j+1)%breite] == ' '

Wie immer, ne Kleinigkeit, die man erst nach stundenlanger Verzweiflung findet :bae:
 

Leroy42

Top Contributor
Code:
j+1%breite
:shock:
Versuch's mal mit

Code:
(j+1)%breite
:cool:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
T Variable in for Schleife ansprechen ohne Array ? Java Basics - Anfänger-Themen 25
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
M Bubblesort ohne Array Java Basics - Anfänger-Themen 30
J Array vertauschen ohne ein neues anzulegen?! Java Basics - Anfänger-Themen 10
4 Median ohne Array Rausbekommen Java Basics - Anfänger-Themen 8
D Sortiertes Array mischen ohne Duplikat Java Basics - Anfänger-Themen 5
Hijo2006 Array/Liste ohne Obergrenze Java Basics - Anfänger-Themen 38
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
J Warum wird Array durch Methode ohne Rückgabewert verändert? Java Basics - Anfänger-Themen 5
S Umwandlung Binär in Dezimal (ohne array etc.) Java Basics - Anfänger-Themen 6
M Array verbinden, mit und ohne new Java Basics - Anfänger-Themen 2
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
H Array wird verändert ohne Rückgabe? Java Basics - Anfänger-Themen 7
M Array erweitern ohne Stringbuilder Java Basics - Anfänger-Themen 6
E Array mit Zufallswerten von 1 bis 45 ohne Wiederholung füllen Java Basics - Anfänger-Themen 21
R Erste Schritte 2D-Array: Zeilen & Spalten ohne schleife übergeben? Java Basics - Anfänger-Themen 3
S MIN Array ohne 0 Java Basics - Anfänger-Themen 5
S Einen neuen String ohne Array oder List erzeugen??? Java Basics - Anfänger-Themen 13
S Array bei index halbe umdrehen ohne hilfsfeld Java Basics - Anfänger-Themen 13
A OOP Array wird ohne grund sortiert?! Java Basics - Anfänger-Themen 4
D Array anlegen ohne bekannte Länge? Java Basics - Anfänger-Themen 6
T array erweitern/flexible ohne collections usw. Java Basics - Anfänger-Themen 3
C array in anderes kopieren ohne zu überschreiben . Java Basics - Anfänger-Themen 13
J Mehrdimensionale Liste erstellen ohne Array Java Basics - Anfänger-Themen 14
M 2d string array initialisieren ohne neu String Java Basics - Anfänger-Themen 3
L Array ohne terminierende Null Java Basics - Anfänger-Themen 4
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9

Ähnliche Java Themen


Oben