ArrayIndexOutOfBoundsException

Status
Nicht offen für weitere Antworten.
G

guilhelm

Gast
ich habe einige Themen über dieses Problem im Forum gelesen, ich habe aber keine Lösung für mein Problem gefunden.

Wir programmieren das Spiel "4 Gewinnt" ohne graphische Darstellung und haben ein Problem, wenn das Programm überprüfen soll, ob der Spieler gewonnen hat.

Beim Compilieren gibts kein Problem, nur wenn man spielt kommt so was:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2
at Logik.gewonnen(Logik.java:50)
at Spiel.spielen(Spiel.java:65)
at Start.main(Start.java:22)

Code:
public class Start
{
	public static void main(String[] args)
	{
		System.out.print("Wie heisst der 1. Spieler? ");
		String name1 = Tools.stringEingabe();
		System.out.print("Wie heisst der 2. Spieler? ");
		String name2 = Tools.stringEingabe();
		
		char[][] spielfeld = new char[6][7];
		for(int j = 0; j <= 6; j++)
		{
			for(int k = 0; k <= 5; k++)
			{
				spielfeld[k][j] = ' ';
			}
		}
		
		Spiel meinSpiel = new Spiel();
		
		meinSpiel.ausgabe(spielfeld);
		meinSpiel.spielen(spielfeld, 1, name1, name2);
	}
}

Code:
public class Spiel
{
	public char stein;
	public int dran;
	public int zeile;
		
	public void spielen(char[][] spielfeld, int dran, String n1, String n2)
	{
		Logik l = new Logik(false);
		boolean g = false;
		
		for(int i = 1; i <= 42 && g == false; i++)
		{
			if(dran == 1)
			{ 
				stein = 'X';
				
				System.out.println(n1+" ist dran!");
				System.out.print("In welche Spalte? ");
				int spalte = Tools.intEingabe();
				
				if(spielfeld[5][spalte] == ' ')
				{
					spielfeld[5][spalte] = stein;
				}
				else
				{
					for(int z = 0; spielfeld[z][spalte] == ' ' && z <= 4; z++)
					{
						zeile = z;
					}
					spielfeld[zeile][spalte] = stein;
				}
				//Diese Zeile sollte die Zeile 65 sein (haben viele unwichtige Zeilen gelöscht)
				g = l.gewonnen(stein, spielfeld, zeile, spalte);

Code:
public class Logik
{
	boolean gewonnen;
	
	public Logik(boolean gewonnen)
	{
		this.gewonnen = gewonnen;
	}
	
	boolean gewonnen(char stein, char[][] sf, int z, int s)
	{
		int l = s - 1;
		int ll = s - 2;
		int lll = s - 3;
		int r = s + 1;
		int rr = s + 2;
		int rrr = s + 3;
		int u = z + 1;
		int uu = z + 2;
		int uuu = z + 3;
		int o = z - 1;
		int oo = z - 2;
		int ooo = z - 3;

		System.out.println("Zeile = "+z+" Spalte = "+s);
		
		//horizontal
		if(s > 1 && s < 6 && sf[z][ll] == stein && sf[z][l] == stein && sf[z][r] == stein)
		{ gewonnen = true;}
		else if(s > 0 && s < 5 && sf[z][l] == stein && sf[z][r] == stein && sf[z][rr] == stein)
		{ boolean gewonnen = true;}
		else if(s > 2 && sf[z][lll] == stein && sf[z][ll] == stein && sf[z][l] == stein)
		{ boolean gewonnen = true;}	
		else if(s < 4 && sf[z][r] == stein && sf[z][rr] == stein && sf[z][rrr] == stein)
		{ boolean gewonnen = true;}
		
		//vertikal
		else if(z < 3 && sf[z][u] == stein && sf[z][uu] == stein && sf[z][uuu] == stein)
		{ boolean gewonnen = true;}
		
		//diagonal obenlinks - untenrechts
//Diese Zeile sollte die Zeile 50 sein:
		else if(s > 1 && s < 6 && z < 5 && sf[oo][ll] == stein && sf[o][l] == stein && sf[u][r] == stein)
		{ boolean gewonnen = true;}
		else if(s > 0 && s < 5 && z < 4 && sf[o][l] == stein && sf[u][r] == stein && sf[uu][rr] == stein)
		{ boolean gewonnen = true;}
		else if(s > 2 && sf[ooo][lll] == stein && sf[oo][ll] == stein && sf[o][l] == stein)
		{ boolean gewonnen = true;}
		else if(s < 4 && z < 3 && sf[uuu][rrr] == stein && sf[uu][rr] == stein && sf[u][r] == stein)
		{boolean gewonnen = true;}
		
		//diagonal obenrechts - untenlinks
		else if(s > 0 && s < 5 && z < 5 && sf[oo][rr] == stein && sf[o][r] == stein && sf[u][l] == stein)
		{boolean gewonnen = true;}
		else if(s > 1 && s < 6 && z < 4 && sf[o][r] == stein && sf[u][l] == stein && sf[uu][ll] == stein)
		{ boolean gewonnen = true;}
		else if(s < 4 && sf[ooo][rrr] == stein && sf[oo][rr] == stein && sf[o][r] == stein)
		{ boolean gewonnen = true;}
		else if(s > 2 && z < 3 && sf[u][l] == stein && sf[uu][ll] == stein && sf[uuu][lll] == stein)
		{ boolean gewonnen = true;}
		else { boolean gewonnen = false;}
		return gewonnen;
	}
 

mikachu

Top Contributor
:shock: ???:L

viel spass beim reindenken :bahnhof:

auf jeden fall greifst du irgendwo auf ein element zu, was entweder noch nicht initialisiert wurde, oder was es gar nicht gibt...

angenommen du kriegst z = 1 übergeben, und oo = z - 2 ergibt dann eine -1 !
das ist für einen index ein unzulässiger integer-wert.

laut deiner fehlerausschrift, ist der parameter z auf 0 gesetzt, darum auch ArrayIndexOutOfBoundsException -2
 

thE_29

Top Contributor
Die Exception sagt aber das der übergeben Index (also -2) nicht erreichbar ist!

Nur wie kommt er auf -2?
 
G

guilhelm

Gast
ja also das habe ich ja beschränkt!

Code:
else if(s > 1 && s < 6 && z < 5 && sf[oo][ll] == stein && sf[o][l] == stein && sf[u][r] == stein)
      { boolean gewonnen = true;}

er sollte eigentlich nicht weiter als die Spalte 0 und Spalte 6, wie die Zeile 5! ich verstehe gar nicht wie er -2 kriegt!
 
G

guilhelm

Gast
jetzt dasselbe aber in einer anderen Zeile:

Zeile = 2, Spalte = 3 und meinArray[6][7]

Code:
else if(s > 1 && s < 6 && z < 5 && z > 1 && sf[oo][ll] == stein && sf[o][l] == stein && sf[u][r] == stein)
		{
			gewonnen = true;
			return gewonnen;
		}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Logik.gewonnen(Logik.java:56)

:x WARUM?! :x
 
G

guilhelm

Gast
ja aber ich habe es beschränkt mit
Code:
else if(s > 1 && s < 6 && z < 5)
und überall anders genau so, auch von oben habe ich eine Grenze gesetzt

das programm sollte dann, gar nicht prüfen ob irgendein Wert "out of bounds" ist oder nicht, wenn die Zeile und Spalten mit der Einschränkung nicht stimmen, oder?

hab' immer gelernt dass A && B = false ist, wenn A = false ist ohne zu prüfen ob B false oder true ist, im Gegensatz zu "&", das heisst wenn s schone kleiner gleich 1 wäre, würde das Programm was noch kommt überhaupt nicht prüfen...
 

mikachu

Top Contributor
iss richtig... aber
Code:
else if(s > 2 && sf[ooo][lll] == stein && sf[oo][ll] == stein && sf[o][l] == stein)
      { boolean gewonnen = true;}
z = 2; (wie oben)
ooo = z - 3 = 2 - 3 = -1; :!:
 
G

guilhelm

Gast
danke für eure zeit, ich habe inzwischen die loesung gefunden: gab ein problem bei der vertikal loesung, das programm hat es einfach falsch verstanden, und eine andere zeile gezeigt...
 
B

bygones

Gast
nebenbei einen Tipp für die Helfer, als auch für dich:
Code:
boolean gewonnen(char stein, char[][] sf, int z, int s) 
   { 
      int l = s - 1; 
      int ll = s - 2; 
      int lll = s - 3; 
      int r = s + 1; 
      int rr = s + 2; 
      int rrr = s + 3; 
      int u = z + 1; 
      int uu = z + 2; 
      int uuu = z + 3; 
      int o = z - 1; 
      int oo = z - 2; 
      int ooo = z - 3;
als allgemeiner Tipp: Nutze sprechende Variablen... in dem ganzen wust ist dir irgendwann nicht mehr klar, was sf[ll] ist bzw sf[uuu]... Bad Practice !! und was ist s und z ?!

ich halte auch ausarten ala l ll lll für unsinnig... das eine ist s-1, das andere s-2 und das dritte s-3, warum ihnen noch so unwirre namen geben.

keine Ahnung sagen wir s soll die x Koordinate sein. Dann nenn s => xCoordinate und in den arrays dann einfach -1 -2 bzw -3

Es lebe die Übersicht ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
Kumora ArrayIndexOutOfBoundsException bei einem Sortierverfahren Java Basics - Anfänger-Themen 2
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
B ArrayIndexOutOfBoundsException, ich finde den Fehler nicht? Java Basics - Anfänger-Themen 10
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
JaVaN0oB java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 18
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
F ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
C Erste Schritte ArrayIndexOutOfBoundsException beim Speichern im Array Java Basics - Anfänger-Themen 2
Hanschyo ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
I java.lang.ArrayIndexOutOfBoundsException at lösung.main Java Basics - Anfänger-Themen 3
M ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 1
R Compiler-Fehler ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 7
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
L ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 10
J Zwei Arrays zippen wirft eine ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 11
V java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
V ArrayIndexOutofBoundsException:0 Java Basics - Anfänger-Themen 0
R ArrayIndexOutofBoundsException: 10 Java Basics - Anfänger-Themen 5
P ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T ArrayIndexOutOfBoundsException -> Fehler in for-Schleife? Java Basics - Anfänger-Themen 6
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
T ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
B java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
S noch ein ArrayIndexOutOfBoundsException Fehler Java Basics - Anfänger-Themen 2
R Compiler-Fehler java.lang.ArrayIndexOutOfBoundsException, warum? Java Basics - Anfänger-Themen 6
O ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 18
J "ArrayIndexOutOfBoundsException", finde den Fehler schlicht nicht Java Basics - Anfänger-Themen 6
A ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 20
T ArrayIndexOutOfBoundsException - Problem mit Array-Größe Java Basics - Anfänger-Themen 4
C ArrayIndexOutOfBoundsException bei meinem ersten objektiorientierten Programm Java Basics - Anfänger-Themen 4
A parseDouble - ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 3
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
A ArrayIndexOutOfBoundsException - woher kommt er?! Java Basics - Anfänger-Themen 4
J AWT-EventQueue: ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 6
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
K ArrayIndexOutOfBoundsException: 0 Java Basics - Anfänger-Themen 4
Luk10 ArrayIndexOutOfBoundsException .... Java Basics - Anfänger-Themen 2
X Probleme mit ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 7
B Fehlermeldung: "ArrayIndexOutOfBoundsException"??? Java Basics - Anfänger-Themen 3
H java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 Java Basics - Anfänger-Themen 5
N ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 7
U ArrayIndexOutOfBoundsException - dringend Hilfe gesucht Java Basics - Anfänger-Themen 8
S java.lang.ArrayIndexOutOfBoundsException: 5 nur wieso? Java Basics - Anfänger-Themen 2
T ArrayIndexOutOfBoundsException ? Matrizenrechnung. Java Basics - Anfänger-Themen 3
B ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
T ArrayIndexOutOfBoundsException finde den Auslöser nicht Java Basics - Anfänger-Themen 5
V java.lang.ArrayIndexOutOfBoundsException: Java Basics - Anfänger-Themen 3
E 2 Prob.:"ArrayIndexOutOfBoundsException" & do- Java Basics - Anfänger-Themen 2
Z Warum habe ich eine ArrayIndexOutOfBoundsException? Java Basics - Anfänger-Themen 2
N ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 3
N ArrayIndexOutOfBoundsException...... Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben