どのように特定の要素の2Dのchar配列内の行をチェックしますか、その後の行にあるどのように多く、その要素のカウント?(Javaの)

CB-9099:

これは、ボードが与えられた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を返すと、最終的なブールメソッドによって呼び出されるということです。すべてのボードよりも真である場合に有効なソリューションです。1が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;
    }
ミゲル・アビラ:

希望は、それはあなたを助ける、私は一度前にそれを試してみました、それが働きました。

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;
}

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=385569&siteId=1