Как проверить строку в массиве двумерных символов для указанного элемента c, а затем подсчитать, сколько из этого элемента находится в строке? (Java) - PullRequest
0 голосов
/ 01 апреля 2020

Это проблема N Квинса, где дана доска, и вы должны использовать методы, чтобы проверить, где расположены строки, столбцы и по диагонали. Мой метод проверки строки здесь: Это работает, если вы подсчитываете Куинс в целом, но я хочу проверять только строку за строкой, сбрасывая счетчик и количество строк .

private boolean oneQueenPerRow() //ensures that there is only 1 queen in each row
{
    int count = 0;
    int rowcount = 0;
    for (int i = 0; i < board.length; i++)
    {
        //count  = 0;
        for (int j = 0; j < board.length; j++)
        {
            //rowcount = 0;
            while (rowcount <= size-1)
            {
                if (board[i][j] == QUEEN)
                {
                    count++;
                    rowcount++;  
                }
                if (board[i][j] == BLANK)
                {
                    rowcount++;
                }
            }
            if (count != 1) // if size replaces 1 then it works, but counts Q's as a whole
            {
                return false;
            }             
        } 
    }
    return true;
}

Идея состоит в том, что все методы возвращают true или false и затем вызываются окончательным логическим методом. Если все верно, то Правление является действительным решением. Если один из них ложный, совет не является правильным решением. Вот пример текстового файла, который мне дали:

4 BQBB BBBQ QBBB BBQB

(они должны быть сложены ..)

У меня недостаточно знаний о массивах и для циклов, чтобы сказать, идет ли это полностью через весь файл или только строку за один раз, хотя доверяйте мне, когда я говорю, что исчерпал все ресурсы.

Я работал над этим в течение нескольких дней, и я не могу понять это, и связь с моим профессором является пятнистой из-за этого вируса! Мне отчаянно нужна помощь!

private boolean noDiagonalAttacks() //makes sure that Queens cannot attack diagonally
    {
        for (int i = 0; i < board.length; i++)
        {
            int count = 0;
            for (int j = 0; j < board.length; j++)
            {
                if (board[i][j] == QUEEN)
                {
                    if(this.toRight() == false || this.toLeft() == false)
                    {
                        return false;
                    }
                    count++;
                }
            }
        }
        return true;
    }

    private boolean toRight()
    {
        for (int i = 0; i < board.length; i++)
        {
            for (int j = 0; j < board.length; j++)
            {
                while (board[i][j] != board[i][size-1] || board[i][j] != board[size-1][j]) //add a count to this?
                {
                    if (board[i][j] == QUEEN)
                    {
                        return false;
                    }
                }
            }    
        } 
        return true;       
    }

    private boolean toLeft()
    {
        for (int i = 0; i < board.length; i++)
        {
            for (int j = 0; j < board.length; j++)
            {
                while (board[i][j] != board[i][0] || board[i][j] != board[size-1][j])
                {
                    if (board[i][j] == QUEEN)
                    {
                        return false;
                    }
                }
            }
        }    
        return true;
    }

1 Ответ

0 голосов
/ 01 апреля 2020

Я попробовал один раз go, и это сработало, надеюсь, это поможет вам.

private boolean oneQueenPerRow() {
    int foundQueens;
    for (int i = 0; i < board.length; i++) {
        foundQueens = 0;//each loop is a checked row
        for (int j = 0; j < board.length; j++) {
            if (board[i][j] == QUEEN)
                foundQueens++;
        }
        if (foundQueens > 1) return false;
    }
    return true;
}

private boolean oneQueenPerDiagonal() {
    int inLeftRight = 0;
    int inRightLeft = 0;
    for (int i = 0; i < board.length; i++) {
        if (board[i][i] == QUEEN)
            inLeftRight++;
        if (board[i][board.length-i-1] == QUEEN)
            inRightLeft++;
    }
    return inLeftRight < 1 && inRightLeft < 1;
}

...