[英]Converting 1D array to 2D array regarding FOR loops Processing
我正在計算機科學課上使用處理能力來打井字游戲。 在我的程序中,我正在對3行檢查器進行編碼,並且嘗試使用2D數組代碼對此進行編碼,因為在對X / O進行編碼時,我的數組被初始化為2D數組。此外,我的老師還給我們提供了一個該示例的代碼但是是在1D數組中進行的,因此我不知道如何將他關於FOR循環的示例轉換為2D,以便它可以運行到我的程序中。 我已經將數組代碼轉換為適用於我的程序,並且該程序正在運行,但是有關有人是否獲勝的代碼(FOR循環)不起作用。 有人能幫我嗎?
void onlyX() { //views only X pieces, runs checker for onlyX (attempted to
convert to 2D array form)
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
if (boardPiece[i][j] == "X") {
onlyXPiece[i][j] = "X";
}
}
}
}
/*void onlyX() { //1D Form
for (int i=0; i<numberOfBoardPieces; i++) {
if (boardPiece[i] == "X") {
onlyXPiece[i] = "X";
}
}
}*/
void onlyO() { //views only O pieces, runs checker for onlyO (attempted to
convert to 2D array form)
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
if (boardPiece[i][j] == "O") {
onlyOPiece[i][j] = "O";
}
}
}
}
/*void onlyO() { //1D form
for (int i=0; i<numberOfBoardPieces; i++) {
if (boardPiece[i] == "O") {
onlyOPiece[i] = "O";
}
}
}*/
您的2D數組FOR循環(通常稱為double FOR LOOP)看起來不錯,盡管我不太明白為什么要將X和O放在單獨的2D數組中。 有多種檢查獲勝條件的方法,但這似乎過於復雜。
我在代碼頂部改寫了double for循環,以執行易於理解並適用於X和O的勝利檢查。別忘了您還必須檢查垂直和對角線勝利。
String[][] boardPiece = {{"X", "", "O"},
{"O", "O","O"},
{"X", "", "X"}};
void setup() {
println("X wins = "+ str(checkRows("X")));
println("O wins = "+ str(checkRows("O")));
}
boolean checkRows(String XorO) {
for (int i=0; i<3; i++) { //for every row
boolean win = true; //set win to true
for (int j=0; j<3; j++) { //for every column
if (boardPiece[i][j] != XorO) { //if the column does not equal the sign that you are checking
win = false; // meaning its the other, or it's empty, then set win to false
}
}
if (win) {
return true; //if win is true, then there are 3 X's or 3 O's in this row, so return true
}
}
return false; // if none of the rows contain 3 equal, return false
}
要檢查某人是否贏得了比賽,您必須檢查列,行和對角線。 用一個參數編寫一個checkBoard
函數,您可以在其中指定要檢查的塊的類型( "X"
"O"
):
boolean checkBoard(String p) {
boolean won = false;
// check rows and columns
for (int i=0; !won && i<3; i++) {
boolean eqRow = true;
boolean eqCol = true;
for (int j=0; j<3; j++) {
eqRow = eqRow && boardPiece[i][j] == p;
eqCol = eqCol && boardPiece[j][i] == p;
}
won = eqRow || eqCol;
}
// check diagonals
if ( !won )
{
boolean d1 = true;
boolean d2 = true;
for (int i=0; !won && i<3; i++) {
d1 = d1 && boardPiece[i][i] == p;
d2 = d2 && boardPiece[2-i][i] == p;
}
won = d1 || d2;
}
return won;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.