You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codecademy井字棋项目中2D vector无法打印问题求助

解决2D Vector打印问题及井字棋项目优化建议

代码中的核心问题

  1. 内层循环判断错误:你在内层循环中用了board.size(),但这个值是外层vector的行数(当前为2),正确的应该是取当前行的列数board[i].size()。
  2. 棋盘初始化不完整:井字棋需要3×3的棋盘,你只初始化了两行,缺少第三行{7,8,9}。
  3. 输出格式错误:每次打印元素后就用endl换行,导致每个数字单独占一行,应该在整行元素打印完后再换行。
  4. 冗余全局变量:全局的i和j完全没必要,循环内的局部变量已经能满足需求,全局变量容易引发不必要的冲突。

修正后的代码

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void intro(){
    cout << "Let's play a game of Tic-Tac-Toe!\n Decide who goes first and enter your letters accordingly.\n First to match three letters in a row wins!\n\n";
}

int main(){
    intro();

    // 初始化标准3×3井字棋棋盘
    vector<vector<int>> board{{1,2,3},{4,5,6},{7,8,9}};
    
    // 遍历每一行
    for(int i = 0; i < board.size(); i++){
        // 遍历当前行的每一列
        for (int j = 0; j < board[i].size(); j++){
            cout << board[i][j] << " ";
        }
        // 整行打印完成后换行
        cout << endl;
    }

    return 0;
}

后续项目优化建议

  • 调整存储类型:后续要存储X/O,建议把vector的类型从int改为char,比如初始化为vector<vector<char>> board(3, vector<char>(3, ' ')),或者保留数字初始化,后续用X/O替换对应位置的数字。
  • 输入转换逻辑:处理用户输入时,可以让用户输入1-9的位置数字,通过(n-1)/3计算行索引、(n-1)%3计算列索引,快速定位到棋盘对应的位置。
  • 封装打印逻辑:单独写一个printBoard函数封装打印代码,每次棋盘更新后直接调用,避免重复代码。
  • 胜负判断:添加逻辑检查每行、每列、两条对角线是否存在连续三个相同的非空字符,实现胜负判定功能。

内容的提问来源于stack exchange,提问作者user24549772

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:55:01