[Java] Tetris DeleteRows(): ArrayIndexOutOfBoundsException ?

Pagina: 1
Acties:

  • CT
  • Registratie: September 2001
  • Laatst online: 17:48

CT

📱💻 🎮 ⌚🖥

Topicstarter
Ik krijg met het volgende stukje source een ArrayIndexOutOfBoundsException

Maar deze krijg ik alleen als de onderste rij vol is (vanaf de 2e of hoger is er niks aan de hand).
Dit is op Y-as = 19

Als een rij vol (SUM == 10) is dan worden alle boven liggende rij'en 1 naar beneden geplaatst. Deze loop duurt net zo lang als dat er (volle) rij'en zijn.

De code:

(geen php maar java!!)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
                // Doorloop het hele veld en zoek naar volle rij'en.
            int sum, i, j, del = 0;
                for (i = 19; i >= 0; i--) {
                    sum = 0;
                    for (j = 0; j < 10; j++) {
                        if (field[j][i] != 0)
                            sum++;
                    }
                            // Als de som 10 is, dan is de rij vol en moet alles 1 naar beneden.
                            // Dus de field moet field zijn -1 op de y-as.
                    if (sum == 10) {
                        for (j = i; j >= 1; j--) {
                            for (int k = 0; k < 10; k++) {
                                                        field[k][j] = field[k][j - 1];
                            }
                                    }
                        i += 2;
                        // Het aantal rijen dat verwijderd is.
                        del++;
                    }
                }


Ik heb me al helemaal dood gekeken op de code, en in me hersenen zie ik geen problemen tijdens de execution.

Iemand die de exception toch ziet?

  • momania
  • Registratie: Mei 2000
  • Laatst online: 17:50

momania

iPhone 30! Bam!

De i += 2; is volgens mij de boosdoener.
Wanneer je op 19 nu een sum=10 berijkt, dan wordt i daarna 21.

j wordt dan overgenomen van i en dan wordt er met field[k][j-1] een field aangesproken waarbij j dan dus 20 wordt en je array maar tot 19 gaat.

Neem je whisky mee, is het te weinig... *zucht*


  • CT
  • Registratie: September 2001
  • Laatst online: 17:48

CT

📱💻 🎮 ⌚🖥

Topicstarter
kzal die is omzeilen en testen..
(want volgens mij quit die for loop gewoon bij een i hoger dan 19)

  • momania
  • Registratie: Mei 2000
  • Laatst online: 17:50

momania

iPhone 30! Bam!

CT schreef op 01 May 2003 @ 13:14:
kzal die is omzeilen en testen..
(want volgens mij quit die for loop gewoon bij een i hoger dan 19)
Die stopt niet, pas als i kleiner dan 0 wordt stopt hij.

Neem je whisky mee, is het te weinig... *zucht*


  • CT
  • Registratie: September 2001
  • Laatst online: 17:48

CT

📱💻 🎮 ⌚🖥

Topicstarter
hmm toch fout gedacht
code:
1
2
                                i += 2;
                                if (i > 19) i = 19;

ff erbij gezet en nu is er idd niks meer aan de hand :)
thanks :)