Zweidimensionales Array mit boolean-Werten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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:

    Quellcode

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


    Und meine Main dazu:

    Quellcode

    1. import javax.swing.*;
    2. public class BaeumeTest {
    3. public static void main (String[] args) {
    4. int x,y,hoehe,breite;
    5. hoehe = Integer.parseInt(JOptionPane.showInputDialog("Höhe des Feldes: "));
    6. breite = Integer.parseInt(JOptionPane.showInputDialog("breite des Feldes: "));
    7. x = Integer.parseInt(JOptionPane.showInputDialog("x-te Position: "));
    8. y = Integer.parseInt(JOptionPane.showInputDialog("y-te Position: "));
    9. BaeumeFaellen baum = new BaeumeFaellen(x, y, hoehe, breite);
    10. JOptionPane.showMessageDialog(null, baum.toString());
    11. }
    12. }
    Alles anzeigen
  • Du erstellst immer nur ein Array der Größe 0x0.

    Die Initialisierung der Objektvariablen, also insbesondere das:

    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.