problemen met bord vier-op-een-rij

Status
Niet open voor verdere reacties.

ellendm

Gebruiker
Lid geworden
6 dec 2008
Berichten
38
Hallo,

hier ben ik het programma aan het laten controleren ofdat er een vier op een rij is. Helaas lukt mij dat niet aangezien het spel vastloopt bij het controleren.

Dit is de foutboodschap:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at be.kdg.project.VierOpEenRij.Bord.isVierOpEenRij(Bord.java:73)

Het bord is een matrix van characters, voor een leeg vakje gebruik ik een '*'-karakter, voor rood een 'X'-karakter en voor geel een 'O'-karakter.

Ik ben al een paar dagen bezig geweest om dit probleem op te lossen maar het lukt me niet. Kan iemand misschien helpen?


(Het volledige project staat in de bijlage.) Bekijk bijlage 4oprij.rar

Code:
public class Bord {   
    private char[][] bord;    
    private char leeg;
    private char rood;
    private char geel;

public boolean isVierOpEenRij() {
        boolean status = false;
        boolean stHor = false;

for (int row = 1; row <= RIJEN; row++) {
            for (int column = 1; column <= 4; column++) {
                if (bord[row][column] != leeg &&                                  //<-- hier begint de fout volgens de foutboodschap
                        bord[row][column] == bord[row][column + 1] &&
                        bord[row][column] == bord[row][column + 2] &&
                        bord[row][column] == bord[row][column + 3]) {
                    stHor = true;
                }
            }
        }
        return status;
 
Een array begint op [0][0], niet op [1][1] :)
Dus als je een array aanmaakt van 2 bij 2, dan heb je:

[0][0], [0][1]
[1][0], [1][1]

Hier moet je dus rekening mee houden bij je for lussen
 
Ik heb de for-lussen veranderd :)

Code:
for (int row = 0; row <= RIJEN; row++) {
            for (int column = 0; column <= 3; column++) {

Maar toch krijg ik dezelfde foutboodschap :/

Ik denk dat er ook een fout inzit in deze voorwaarde:
Code:
bord[row][column] != leeg

Het is de bedoeling dat het vakje niet leeg mag zijn (m.a. het vakje mag geen '*'-karakter bevatten).
 
Probeer dit es:
Code:
for (int row = 0; row < RIJEN; row++) {
            for (int column = 0; column <= 3; column++) {
 
Dankjewel! Het werkt! Nu moet ik nog verticaal en diagonale vier op een rij nakijken :)
 
Dankjewel! Het werkt! Nu moet ik nog verticaal en diagonale vier op een rij nakijken :)


Met deze code:

Code:
public boolean isVierOpEenRij() {
        boolean status = false;
        boolean stHor = false;
        boolean stVer = false;
        boolean stDiaPos = false;
        boolean stDiaNeg = false;
        //horizontaal
        for (int rij = 0; rij < RIJEN; rij++) {
            for (int kolom = 0; kolom <= 3; kolom++) {
                if (bord[rij][kolom] != leeg &&
                        bord[rij][kolom] == bord[rij][kolom + 1] &&
                        bord[rij][kolom] == bord[rij][kolom + 2] &&
                        bord[rij][kolom] == bord[rij][kolom + 3]) {
                    stHor = true;
                }
            }
        }

        // verticaal
        for (int rij = 0; rij < 3; rij++) {
            for (int kolom = 0; kolom < KOLOMMEN; kolom++) {
                if (bord[rij][kolom] != 0 &&
                        bord[rij][kolom] == bord[rij + 1][kolom] &&
                        bord[rij][kolom] == bord[rij + 2][kolom] &&
                        bord[rij][kolom] == bord[rij + 3][kolom]) {
                    stVer = true;
                }
            }
        }

        // diagonaal (positieve helling)
        for (int rij = 0; rij < 3; rij++) {
            for (int kolom = 0; kolom < 3; kolom++) {
                if (bord[rij][kolom] != 0 &&
                        bord[rij][kolom] == bord[rij + 1][kolom + 1] &&
                        bord[rij][kolom] == bord[rij + 2][kolom + 2] &&
                        bord[rij][kolom] == bord[rij + 3][kolom + 3]) {
                    stDiaPos = true;
                }
            }
        }

        // diagonaal (negatieve helling)
        for (int rij = 3; rij < RIJEN; rij++) {
            for (int kolom = 0; kolom < 3; kolom++) {
                if (bord[rij][kolom] != 0 &&
                        bord[rij][kolom] == bord[rij - 1][kolom + 1] &&
                        bord[rij][kolom] == bord[rij - 2][kolom + 2] &&
                        bord[rij][kolom] == bord[rij - 3][kolom + 3]) {
                    stDiaNeg = true;
                }
            }
        }
        if(stHor==true || stVer==true || stDiaNeg==true || stDiaPos ==true ) {
            status = true;
        }
        return status;
    }

Maar als ik nu uitvoer zegt die dat er al een vier op een rij is, na amper 2 beurten :/
 
Mijn problemen zijn allemaal opgelost, dank u wel aan iedereen!
 
Goedendag, beste heren van het helpmij forum

het hier boven besproken onderwerp is mij tot nut toe erg nuttig gebleken. ik heb er zelf al wat uurtjes mee gestoeid, het is me alleen nog niet gelukt om verder dan twee beurten te komen. dan geeft hij al aan dat speler 2 heeft gewonnen. hebben jullie misschien al een oplossing voor dit probleem. of kunnen jullie mij misschien vertellen waar het probleem zich bevind?

mvg
wouter
 
Beste wouterror, je mag even je eigen vraag openen, in plaats van in het topic van een ander in te breken.

En daarnaast, we hebben hier ook hele kundige dames die hun steentje bijdragen :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan