数组填充了不正确的值

Array filling up with incorrect values

本文关键字:不正确 填充 数组      更新时间:2023-10-16

我正在创建一个依赖于一组 2d 数组的程序。在我目前正在处理的部分,用户首先输入所需的(正方形边(大小,程序应该初始化所有数组并用 0 填充它们,除了 0 行和列,标签是其中。生成的数组必须看起来像这样:

0 1 2 3 4 ...
1 0 0 0 0 ...
2 0 0 0 0 ...
3 0 0 0 0 ...
4 0 0 0 0 ...
...

我编写的代码看起来不错,但是一旦实现了标签,整个内部(标签不受影响(开始填充一些随机数,每 2 个字段出现 0。这段代码目前是独立工作的,但我会将一些变量移到全局范围内以连接这些部分:

int show_Board(int size){
size++;
int board[size][size];
int i=0, x=0;
for (i=0; i<size; i++){     //filling up the array
for (x=0; x<size; x++){
board[i][x]=0;  
}
for (i=0; i<=size; i++){    //filling in labels on the borders
board[i][0]=i;          // only row 0 breaks if this loop is disabled
for (x=0; x<=size; x++){
board[0][x]=x;
} 
}       
}
for (i=0; i<size; i++){        //displaying the result
for (x=0; x<size; x++){
cout <<"  "<< board[i][x];
}
cout << endl;
}
}
int main(){
show_Board(20);
}

我的问题是如何使数组正确填充(即标签和 0(?

for (int i = 0; i < size; i++){    
for (x=0; x < size; x++){
board[i][x]=0;  
}
for (int i = 0; i <= size; i++){    
board[i][0]=i;          
for (int x = 0; x <= size; x++){
board[0][x]=x;
} 
}       
}

这是代码中的一个片段,只是稍微清理了一下。请注意,您在错误的位置关闭了第一个 for 循环,因此它实际上具有用于在其中设置标签的循环。不幸的是,这是编写丑陋代码的结果。这段代码不仅写得不好,而且它所做的工作比它需要的要多。更容易看到错误,修复和优化好的代码,所以这是你绝对应该研究的事情。

编辑:您在第一个循环中也使用 i <size,但在第二个循环中><= size,这将导致循环额外运行 1 次。我不认为这是你真正想要的。

我不确定为什么你在函数的开头增加大小,因为这会创建一个比用户要求的更大的正方形 1。

这是我的解决方案:

#include <iostream>
int show_board(int size) {
// size++;
int board[size][size];
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
// Set board tile to 0.
board[i][j] = 0;
}
// Set vertical label.
board[i][0] = i;
// Set horizontal label.
board[0][i] = i;
}
// Display board
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
std::cout << board[i][j] << " ";
}
std::cout << std::endl;
}
}
int main() {
show_board(5);
return 0;
}