Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

01.04.2013, 18:05

Wert außerhalb des Arrays, trotz Überprüfung?

Hallo Community,

mal wieder eine theoretische Frage (zu Java):

Wie kann mein zwei-Dimensionales Array (ich nenne es hier Array1), das 20 x 20 Felder hat dauernd das Programm mit der Meldung "ArrayIndexOutOfBoundsException" abstürzen lassen?

Das kleinstmögliche Feld ist doch Array1[0][0], das größte Array1[19][19].

Um zu überprüfen ob der zu testende Wert innerhalb des Arrays liegt, hab ich folgenden Code geschrieben:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  for (int i = -3; i < 3; i++)
    {
        x2 = x + i;
        for(int i2 = -3; i2 < 3; i2++)
        {
            y2 = y + i2;
            if (x2 >= 0 && x2 <= 19 && y2 >= 0 && y2 <= 19)
            {
                if (Array1[x2][y2] == 1)
                {
                Treffer++;
                }
            }
        }
    }



Meine If-Abfragen sollten doch eigentlich solche Fehler verhindern, wie konnte er dennoch auftreten, oder habe ich etwas übersehen?

Gruß,
MitgliedXY

Edit:
Die genau Fehlermeldung wäre:

Zitat

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

Renegade123

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

2

01.04.2013, 18:13

Wieso beginnen die Schleifen mit -3 und enden bei < 3? Verstehe den Code irgendwie nicht ganz. Warum iterierst du nicht einfach in beiden Dimensionen von 0 bis 19 durch?
Liebe Grüße,
René

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

3

01.04.2013, 18:26

Ich hab einen gegebenes x2 und y2, um diese beiden Punkte will ich eines 6x6 großes Feld überprüfen, ich will nicht mehr einfach nur alle ArrayElemente durchlaufen...

Das Problem ist ja, dass ich nicht einfach alle Elemente einfach so überprüfen kann, da die Wahrscheinlichkeit, gerade wenn der gegebene Punkt am Rand liegt, die Felder zum überprüfen ausserhalb des Array liegen könnten. Meine If-Abfragen sollten das verhindern, machen sie aber nicht.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MitgliedXYZ« (01.04.2013, 18:31)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

01.04.2013, 19:04

Einer 20x20 großer Array oder eine Feld von 6x6 widerspricht sich doch nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

5

01.04.2013, 19:08

Um es noch einmal ganz klar zu machen: Das zu überprüfende Array hat eine Größe von 20x20 Feldern.
Ich muss immer nur Ausschnitte von 6x6 überprüfen.
Wenn das Mittlere zu überprüfende Feld am Rand liegt, muss ich evtl. nur ein kleineren Bereich überprüfen, nämlich den im Array.

Das was ich in dem zu überprüfende Feld mache, kann man ja sehen, ich zähle, wie viele Felder den gesuchten Wert enthalten.

Debugt hab ich das schon, aber ich hab nur die oben genannte Meldung erhalten.

Hat sonst jemand eine Idee, woran es liegen könnte?

Edit:
Wenn das mit -3 bis +3 zu unverständlich war:
Ich habe einen Punkt P(x,y) und will die Felder um ihn überprüfen, z.b. so:
0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | P | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 |
deswegen gehe ich alle Felder (falls sie im Gültigen Bereich zwischen 0 und 19 liegen) um P durch.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MitgliedXYZ« (01.04.2013, 19:16)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

01.04.2013, 19:17

Ich sehe nichts, wo an dieser Zeile da falsch ist. Ein NPE muss da höchstens auftreten. Bist Du Dir sicher, dass es wirklich diese Zeilen sind, die da krachen? Sieht nämlich nicht so aus.
Oder wenn Du schon debuggt hast, hast Du ja sicherlich den Index -1 gefunden, richtig? :rolleyes:
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

7

01.04.2013, 19:17

Mit einem Debugger würdest Du nicht mehr das Meldung bekommen, sondern der exakte Zeile Deines Codes, alle Funktionen, die dazu geführt haben, und der momentanen Werte aller Variablen. Nimm den Debugger.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

8

01.04.2013, 19:36

Hast du dir schon den stacktrace angesehen?

9

01.04.2013, 19:57

Augenscheinlich sehe ich keinen Fehler, bin aber auch nicht besonders C++ fit...

Einzige Erklärung die mir spontan dazu einfällt (weil ich ein ähnlich gelagertes Problem vor kurzem hatte) ist, das Du Werte mit falschen Datentypen verrechnest... zB wenn X2 oder Y2 vom Typ Unsigned Integer sind, und dann mit -1 verrechnest, hast Du einen Wert irgendwo bei 4,2milliarden... die wohl weit außerhalb des Bereichs liegen würden...

Hat das Rechtschreibprüfungs-Plugin von FF ein 1. April Modus???? das Ding schreibt scheiße...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »EternalPain« (01.04.2013, 20:03)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

01.04.2013, 20:14

Ich weiß nicht in wie fern Java was mit C++ zu tun hat, aber ok...

Der FF ist es übrigens nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige