如何检查 2D 字符数组中某行的特定元素,然后计算该行中该元素的数量? (Java)
How do you check a row in a 2D char array for a specific element and then count how many of that element are in the row? (Java)
这是一个 N Queens 问题,其中给出了棋盘,您必须使用方法来检查行、列和对角线的位置。我检查行的方法在这里:如果你把皇后区作为一个整体来计算,它是有效的,但我只想逐行检查,重置计数和行数。
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;
}
想法是所有方法 return true 或 false 然后由最终布尔方法调用。如果一切都是真的,那么该板就是一个有效的解决方案。如果一个是错误的,则该板不是有效的解决方案。这是我得到的文本文件示例:
4
BQBB
烧烤
QBBB
烧烤
(它们应该堆叠..)
我对数组和 for 循环的了解不够,无法判断这是遍历整个文件还是一次只遍历一行,尽管相信我,我已经用尽了所有资源。
几天来我一直在研究这个问题,但我无法弄清楚,而且由于这个病毒,我与教授的联系也很不稳定!我迫切需要帮助!
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;
}
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;
}
这是一个 N Queens 问题,其中给出了棋盘,您必须使用方法来检查行、列和对角线的位置。我检查行的方法在这里:如果你把皇后区作为一个整体来计算,它是有效的,但我只想逐行检查,重置计数和行数。
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;
}
想法是所有方法 return true 或 false 然后由最终布尔方法调用。如果一切都是真的,那么该板就是一个有效的解决方案。如果一个是错误的,则该板不是有效的解决方案。这是我得到的文本文件示例:
4 BQBB 烧烤 QBBB 烧烤
(它们应该堆叠..)
我对数组和 for 循环的了解不够,无法判断这是遍历整个文件还是一次只遍历一行,尽管相信我,我已经用尽了所有资源。
几天来我一直在研究这个问题,但我无法弄清楚,而且由于这个病毒,我与教授的联系也很不稳定!我迫切需要帮助!
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;
}
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;
}