C++ 为什么我的数组在每个位置都以0初始化?

C++ 为什么我的数组在每个位置都以0初始化?,c++,C++,所以我完全是个初学者。基本上,我的目标是打印出一张棋盘,上面有跳棋游戏的开始位置,但我只能画一张没有棋子的空白棋盘。我不明白为什么,因为我声明它只应该在数组位置等于白色(-1)时执行此操作。但是,如果尝试做一个测试并打印出任意一个随机位置,每个位置都等于0。所以在这一点上,我感到非常失落,因为我写的代码对我来说完全有意义 //main.cpp #include <iostream> #include <array> #include "board.hpp&qu

所以我完全是个初学者。基本上,我的目标是打印出一张棋盘,上面有跳棋游戏的开始位置,但我只能画一张没有棋子的空白棋盘。我不明白为什么,因为我声明它只应该在数组位置等于白色(-1)时执行此操作。但是,如果尝试做一个测试并打印出任意一个随机位置,每个位置都等于0。所以在这一点上,我感到非常失落,因为我写的代码对我来说完全有意义

//main.cpp
#include <iostream>
#include <array>

#include "board.hpp"

int main()
{
    board Checkers;
    Checkers.printBoard();
}

//board.cpp
class board
{
    private:

        std::array<std::array<int, 8>, 8> boardArr;
        int const white = -1;
        int const black = 0;
        int const player1 = 1;
        int const player2 = 2;


    public:

        board()
        {
            for( int i = 0; i < 8; i++ )
            {
                for( int j = 0; j < 8; j++ )
                {
                    if( ((i + j) % 2)  == 1 )
                    {
                        boardArr.at(i).at(j) = black;
                    }
                    else
                    {
                        boardArr.at(i).at(j) = white;
                    }
                }
            }

            for( int i = 0; i < 3; i++ )
            {
                for( int j = 0; j < 8; j++)
                {
                    if( boardArr.at(i).at(j) = black )
                    {
                        boardArr.at(i).at(j) = player2;
                    }
                }
            }

            for( int i = 5; i < 8; i++ )
            {
                for( int j = 0; j < 8; j++)
                {
                    if( boardArr.at(i).at(j) = black )
                    {
                        boardArr.at(i).at(j) = player1;
                    }
                }
            }
        }

        void printBoard()
        {
            /*
            std::cout << "(TEST) on (white) 0.0::: " << boardArr.at(0).at(0) << "\n\n\n";
            std::cout << "(TEST) on (black) 3.0::: " << boardArr.at(3).at(0) << "\n\n\n";
            std::cout << "(TEST) on (O) 0.1::: " << boardArr.at(0).at(1) << "\n\n\n";
            std::cout << "(TEST) on (X) 7.0::: " << boardArr.at(7).at(0) << "\n\n\n";
            */

            std::cout << "  | A | B | C | D | E | F | G | H |" << "\n"
                      << "--+---+---+---+---+---+---+---+---+--" << "\n";
            for( int i = 0; i < 8; i++ )
            {
                std::cout << -i + 8 << " |";
                for( int j = 0; j < 8; j++ )
                {
                     if( boardArr.at(i).at(j) = white )
                     {
                         std::cout << "   |";
                     }
                     else if( boardArr.at(i).at(j) = black )
                     {
                         std::cout << "###|";
                     }
                     else if( boardArr.at(i).at(j) = player2 )
                     {
                         std::cout << " O |";
                     }
                     else if( boardArr.at(i).at(j) = player1 )
                     {
                        std::cout << " X |";
                     }
                }
                std::cout << "\n" << "--+---+---+---+---+---+---+---+---+--" << "\n";
            }
        }
};
//main.cpp
#包括
#包括
#包括“board.hpp”
int main()
{
跳板;
Checkers.printBoard();
}
//board.cpp
班级委员会
{
私人:
std::阵列boardArr;
int const white=-1;
int const black=0;
int const player1=1;
int const player2=2;
公众:
董事会()
{
对于(int i=0;i<8;i++)
{
对于(int j=0;j<8;j++)
{
如果(((i+j)%2)==1)
{
在(i)和(j)处的边界线=黑色;
}
其他的
{
在(i)和(j)处的边界线=白色;
}
}
}
对于(int i=0;i<3;i++)
{
对于(int j=0;j<8;j++)
{
if(boardArr.at(i).at(j)=黑色)
{
在(i)和(j)处的boardArr.at=玩家2;
}
}
}
对于(int i=5;i<8;i++)
{
对于(int j=0;j<8;j++)
{
if(boardArr.at(i).at(j)=黑色)
{
在(i)和(j)处的boardArr.at=玩家1;
}
}
}
}
作废印制板()
{
/*

std::cout我认为@M.M已经指出了问题所在。问题在于您在
printBoard()
函数中检查了board cell(即
boardArr.at(I).at(j)
)的状态。在这里,我添加了更新的代码,请查看并与您的代码进行比较:

//main.cpp
#include <iostream>
#include <array>

//#include "board.hpp"

//board.cpp
class board
{
    private:

        std::array<std::array<int, 8>, 8> boardArr;
        int const white = -1;
        int const black = 0;
        int const player1 = 1;
        int const player2 = 2;


    public:

        board()
        {
            for( int i = 0; i < 8; i++ )
            {
                for( int j = 0; j < 8; j++ )
                {
                    if( ((i + j) % 2)  == 1 )
                    {
                        boardArr.at(i).at(j) = black;
                    }
                    else
                    {
                        boardArr.at(i).at(j) = white;
                    }
                }
            }

            for( int i = 0; i < 3; i++ )
            {
                for( int j = 0; j < 8; j++)
                {
                    if( boardArr.at(i).at(j) == black )
                    {
                        boardArr.at(i).at(j) = player2;
                    }
                }
            }

            for( int i = 5; i < 8; i++ )
            {
                for( int j = 0; j < 8; j++)
                {
                    if( boardArr.at(i).at(j) == black )
                    {
                        boardArr.at(i).at(j) = player1;
                    }
                }
            }
        }

        void printBoard()
        {
            /*
            std::cout << "(TEST) on (white) 0.0::: " << boardArr.at(0).at(0) << "\n\n\n";
            std::cout << "(TEST) on (black) 3.0::: " << boardArr.at(3).at(0) << "\n\n\n";
            std::cout << "(TEST) on (O) 0.1::: " << boardArr.at(0).at(1) << "\n\n\n";
            std::cout << "(TEST) on (X) 7.0::: " << boardArr.at(7).at(0) << "\n\n\n";
            */

            std::cout << "  | A | B | C | D | E | F | G | H |" << "\n"
                      << "--+---+---+---+---+---+---+---+---+--" << "\n";
            for( int i = 0; i < 8; i++ )
            {
                std::cout << -i + 8 << " |";
                for( int j = 0; j < 8; j++ )
                {
                     if( boardArr.at(i).at(j) == white )
                     {
                         std::cout << "   |";
                     }
                     else if( boardArr.at(i).at(j) == black )
                     {
                         std::cout << "###|";
                     }
                     else if( boardArr.at(i).at(j) == player2 )
                     {
                         std::cout << " O |";
                     }
                     else if( boardArr.at(i).at(j) == player1 )
                     {
                        std::cout << " X |";
                     }
                }
                std::cout << "\n" << "--+---+---+---+---+---+---+---+---+--" << "\n";
            }
        }
};

int main()
{
    board Checkers;
    Checkers.printBoard();
}
//main.cpp
#包括
#包括
//#包括“board.hpp”
//board.cpp
班级委员会
{
私人:
std::阵列boardArr;
int const white=-1;
int const black=0;
int const player1=1;
int const player2=2;
公众:
董事会()
{
对于(int i=0;i<8;i++)
{
对于(int j=0;j<8;j++)
{
如果(((i+j)%2)==1)
{
在(i)和(j)处的边界线=黑色;
}
其他的
{
在(i)和(j)处的边界线=白色;
}
}
}
对于(int i=0;i<3;i++)
{
对于(int j=0;j<8;j++)
{
if(boardArr.at(i).at(j)=黑色)
{
在(i)和(j)处的boardArr.at=玩家2;
}
}
}
对于(int i=5;i<8;i++)
{
对于(int j=0;j<8;j++)
{
if(boardArr.at(i).at(j)=黑色)
{
在(i)和(j)处的boardArr.at=玩家1;
}
}
}
}
作废印制板()
{
/*

std::cout
=
是赋值运算符。使用
=
进行相等比较如果启用警告(您应该这样做),大多数编译器将对此发出警告提示:了解
enum
。还值得注意的是,跳棋板的布局是不变的,因此黑/白或红/黑模式可以在基于简单模数学的显示逻辑中重现,就像您已经做过的那样。片段本身确实需要跟踪,但您可以使用一个简单的
播放器
enum这种方法的问题是,每次移动一块时,你都需要重新计算正方形的“颜色”,这完全是浪费时间。