You are not logged in.

  • Login

1

Thursday, January 20th 2011, 3:25pm

Zweidimensionales Array mit boolean-Werten

Hallo allerseits,

Ich versuche eine Klasse zu schreiben, in der ein zweidimensionales Array erschaffen wird, in denen die einzelnen Positionen erst einmal alle den Wert "true" erhalten (Bäume werden gepflanzt). Dann soll durch die Main Methode an einer bestimmen Position der Wert wieder in "false" geändert werden (der Baum wird gefällt). Anschließend soll das Array in einen String umgewandelt werden und so wieder an die Main-Methode zurückgeliefert werden. Allerdings wirft der Compiler mir andauernd eine "OutOfBoundsException" ich sehe allerdings nicht, wo und warum das sein soll.
Ich sehe quasi den Wald vor lauter Bäumen nicht mehr (jaja, ich weiß, mießer Wortwitz, aber passend):
Wäre nett, wenn einer von euch den Fehler erkennen könnte und mir das ganze erklären könnte =)

Hier die Methoden:

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class BaeumeFaellen {
 
	int x = 0, y = 0, hoehe, breite;
	private boolean [][]array = new boolean [hoehe][breite];
 
	public BaeumeFaellen(int x, int y, int hoehe, int breite) {
		this.x = x;
		this.y = y;
		this.hoehe = hoehe;
		this.breite = breite;
	}
 
	int getX() {
		return x;
	}
 
	int getY() {
		return y;
	}
 
	boolean [][]pflanzen() {
		for (int i = 0; i <= hoehe; i++) {
			for (int j = 0; j <= breite; j++)
				array[i][j] = true;
		}
		return array;
	}
 
	boolean innerhalb() {
		if (getX() <= hoehe && getY() <= breite)
			return true;
		else
			return false;
	}
 
	boolean [][]faellen() {
		if (innerhalb()) 
			pflanzen()[getX()][getY()] = false;
 
		return pflanzen();
	}
 
	public String toString() {
		String out = "";
 
			for (int i = 0; i <= hoehe; i++){
				for (int j = 0; j <= breite; j++){
					if (array[i][j] == true)
						out = out + "Baum ";
					else
						out = out + "Kein Baum ";
 
					if (j == breite)
						out = out + "\n";
				}
			}
 
		return out;
	}
 
}


Und meine Main dazu:

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import javax.swing.*;
public class BaeumeTest {
 
	public static void main (String[] args) {
		int x,y,hoehe,breite;
 
		hoehe = Integer.parseInt(JOptionPane.showInputDialog("Höhe des Feldes: "));
		breite = Integer.parseInt(JOptionPane.showInputDialog("breite des Feldes: "));
		x = Integer.parseInt(JOptionPane.showInputDialog("x-te Position: "));
		y = Integer.parseInt(JOptionPane.showInputDialog("y-te Position: "));
 
		BaeumeFaellen baum = new BaeumeFaellen(x, y, hoehe, breite);
 
		JOptionPane.showMessageDialog(null, baum.toString());
	}
}

2

Thursday, January 20th 2011, 5:19pm

deine Schleifen sind fehlerhaft...
Statt dem "<=" muss nur ein "<" abgefragt werden. Ein Array fängt immer bei 0 an, somit hat dein Array niemals ein array[hoehe][breite] Element.
Die Abbruchbedienung muss z.B. aussehen:

Java Quellcode

1
2
3
4
5
boolean [][]pflanzen() {
		for (int i = 0; i < hoehe; i++) {
			for (int j = 0; j < breite; j++)
				array[i][j] = true;
		}

3

Thursday, January 20th 2011, 6:14pm

Hum, ich habs jetzt dementsprechend verändert, bekomme immernoch eine OutOfBounds. Angeblich immernoch in Zeile 49. Woran könnte es denn noch liegen?

4

Thursday, January 20th 2011, 6:27pm

Du erstellst immer nur ein Array der Größe 0x0.

Die Initialisierung der Objektvariablen, also insbesondere das:

Java Quellcode

1
private boolean [][]array = new boolean [hoehe][breite];

findet statt BEVOR der Rest des Konstruktors ausgeführt wird. Und zu dem Zeitpunkt sind hoehe und breite beide uninitialisiert und haben dementsprechend den Standradwert 0. Du solltest das erstellen des Arrays in den Konstruktor ziehen, nachdem du hoehe und breite gesetzt hast.

Similar threads

Social bookmarks