Метод winInColumn должен работать, но не работает. Почему?

У меня есть этот метод для игры с подключением 4, чтобы вы могли выиграть в колонке. Однако я получаю индексный массив за пределами исключения -1. Массив, через который он проходит, имеет размер 8x8 (private int [][] values ​​= new int [8][8];).

Где я ошибся?

public int winInAColumn(){
    int sum; //set sum as an integer
    for(int j=0;j<8;j++){ //loop through the rows
        for(int i=4;i>-1;i--){ //loop through columns. I must equal 4 as there must be three disks next to  
            sum = 0; //set sum to 0
            for(int k=i;k>i-4;k--){ //loop backwards through k while k is bigger than i minus 4
                sum+=values[k][j]; //sum + sum = the value in  i and j
            }
            if(Math.abs(sum)==4){
                if(sum/4 == 1){
                    if(JOptionPane.showConfirmDialog(null, "Blue Has Won", "Game over", JOptionPane.OK_CANCEL_OPTION) == 0){
                        //
                    }
                    else 
                    {
                        System.exit(0);
                    } 
                }

                else if (sum/4 == -1){
                    if(JOptionPane.showConfirmDialog(null, "Blue Has Won", "Game over", JOptionPane.OK_CANCEL_OPTION) == 0)
                    {
                        //
                    }
                    else
                    {
                        System.exit(0);
                    } 
                }
            }
        }
    }
                return 0;
        //JOptionPane.showMessageDialog(null, "No one won this time.");
}

person Jesse Luke Orange    schedule 30.03.2013    source источник


Ответы (1)


Во втором цикле i идет назад от 4 к 0, а в третьем цикле k идет назад от i к i - 3, что может достигать -3, отсюда и исключение.

Я действительно не пытался подробно понять ваш алгоритм, но, возможно, замена k>i-4 на k>i-4 && k>=0 поможет...

person Steph    schedule 30.03.2013