我在汇总下面给出的坐标周围的多维数组的值时遇到了一些困难。 我的索引位置逻辑有问题。 任何想法都会很有帮助,如果需要更多信息,请随时问我。

#include <iostream>
#include <ctime>


using namespace std;

int main()
{
srand(time(0));

int displayArray[11][11];

    cout<<"\t\t\t\t\t\t\t\t\t\t\t\t\tColumn\n\n";
    for(int column=1;column<10;column++)
    {
        cout<<"\t "<<column;
    }
    cout<<"\n\n";
    //fill array with random numbers

    for(int i=0;i<9;i++)
    {
        for(int m=0;m<9;m++)
        {
            displayArray[i][m]=rand()%10;
        }
    }

    cout<<"\n\n\n";

    //main data printout

    for(int k=0;k<9;k++)
    {
        cout<<"Row "<<k+1<<"\t ";

    for(int l=0;l<9;l++)
    {
        cout<<displayArray[k][l]<<"\t";
    }
    cout<<endl<<endl;
    }

    cout<<"\n\n";

    int row=0, column=0;
    cout<<"What array cell would you like to see? (Press enter after each entry)\n";
    cout<<"Row = ";
    cin>>row;
    cout<<"Column = ";
    cin>>column;
    cout<<"\nThe number "<<displayArray[row-1][column-1]<<" is in cell "<<row<<","<<column;

    int coord1=displayArray[row-2][column+2],
        coord2=displayArray[row+2][column+2],
        coord3=displayArray[row-2][column-2],
        coord4=displayArray[row-2][column+2],
        coord5=displayArray[row-2][column+2],
        coord6=displayArray[row-2][column+2],
        coord7=displayArray[row-2][column+2],
        coord8=displayArray[row-2][column+2];

    int sum=coord1+coord2+coord3+coord4+coord5+coord6+coord7+coord8;

    cout<<"\n\nThe sum of the cells surrounding "<<row<<","<<column<<" is "<<sum;

    cin.get();
    cin.get();


return 0;
}

===============>>#1 票数:1 已采纳

您的问题可能是您使用的是行/列-2和行/列+2作为相邻方向,这是不正确的。 如果(row-1,col-1)是当前单元格,则您希望row / col -2和row / col +0。

int coord1=displayArray[row-2][column-2],
    coord2=displayArray[row-2][column-1],
    coord3=displayArray[row-2][column],
    coord4=displayArray[row-1][column-2],
    coord5=displayArray[row-1][column],
    coord6=displayArray[row][column-2],
    coord7=displayArray[row][column-1],
    coord8=displayArray[row][column];
int sum=coord1+coord2+coord3+coord4+coord5+coord6+coord7+coord8;

但是,可以通过编程方式完成更多操作:

int sum = 0;
for (int x=row-2; x<=row; x++) {
    for (int y=column-2; y<=column; y++) {
        if ((x != row-1) || (y != column-1)) { //Avoids "center" cell (self)
            sum += displayArray[x][y]
        }
    }
}

===============>>#2 票数:1

因此,如果我正确理解了这一点,那么用户输入的行和列号将与displayArray[row-1][column-1]的值相对应

因此,该单元格周围的坐标应该是。

displayArray[row][column]
displayArray[row-1][column]
displayArray[row-2][column]
displayArray[row][column-1]
displayArray[row-2][column-1]
displayArray[row][column-2]
displayArray[row-1][column-2]
displayArray[row-2][column-2]

我不确定您为什么要使用自己的坐标,但这就是您的问题。

另外,您将要确保如果用户选择数组边界上的单元格,则程序不会崩溃。 例如:如果您尝试搜索单元格(0,0)周围的坐标,则尝试为displayArray[-1][-1]加载值时程序将崩溃

===============>>#3 票数:0

您的错误在于将基于0的索引转换为基于1的索引。 数组基于0。 您要让他们在基于1的行中输入。 然后,您要在其周围添加8个数字。 如果他们输入基于0的数字并输入N,则需要对每行/每一列求和[n-1],n和n + 1。 要处理基于0的数据,您需要执行n-2,n-1和n。 但是,您正在执行n-2和n + 2。 您也没有在右边附近的任何地方计算行的中间。

最佳实践甚至不是那样做数学。 它将读取行/列号,然后立即减去1以使其为0,然后从此开始将其视为0。

  ask by Klinetel translate from so

未解决问题?本站智能推荐:

1回复

C ++多数组-Windows已触发断点

我有一个opengl窗口控件,在其中使用了一个多数组,当我尝试关闭它时,它显示:“ Windows在app.exe中触发了刹车点。这可能是由于堆的损坏...” 我有这样的标题: 在我的应用中,我给每个“边缘点”一个值,如下所示: 如果我注释掉最后一行(terrain [DA
4回复

在(C / C ++)中将一维数组分配为二维数组的元素

请先为我的英语道歉。 让我们分别键入一维和二维数组,如下所示: 然后说我已经初始化了一些VERTEX数组, 数学上假设由三个顶点组合定义的三角形,因此我将三角形定义为以下代码段, 当我要按以下代码将每个VERTEX (单维数组)元素分配给TRIANGLE (数组Arra
6回复

需要有关C ++中二维数组的动态内存分配的帮助

我一直在尝试为二维数组分配动态内存。 经过大量搜索后,我发现了比其他代码看起来更容易的代码,但我仍然无法理解它的每个细节。 有人可以解释一下下面的代码如何动态地将内存分配给数组。 真的很期待获得帮助和对不起,但是我是C ++的新手,想学习它。
2回复

如何在C ++中将文本文件传输到2D数组?

我如何在C ++中将文本文件(.txt)传输到数组2D,这是我的源代码 但是我该如何确定n和m,我需要您的帮助和建议,请加入我们的观点
2回复

简单阵列坐标显示匹配

我正在尝试创建一个数组,该数组接受用户输入并在99 99处中断,但多维数组不会停止获取输入值。 另一个问题是在视觉表示中将值显示在网格下方。 如果需要更多说明,请告诉我。
2回复

C ++中的矩阵索引符号

我可以用一个索引来索引多维数组吗? 例如: 在内存中,多维数组的索引像单个数组一样(例如在矩阵2x2中,矩阵[1] [1]是数组的第四个元素,“矩阵[3]”)是否有系统自动使用此表示法? 我要写matrix [3]而不是matrix [1] [1]:可以吗?
2回复

使用平面数组访问多维数组数据

这个问题使我无法自拔,在这里我不知道发生了什么。 我正在尝试实例化1D数组以模拟3D数组。 我将数组实例化为: 并使用 其中x是垂直索引,y是水平索引,z是深度。 在我的实现中,我需要n * 4个索引,其中n =宽度*高度,4是z值。 我有x,我有宽度,从
2回复

无法将偏移量索引计算为3D数组

我正在编写CUDA内核,以为row * cols主矩阵中的每个位置创建3x3协方差矩阵。 这样3D矩阵的大小为row * cols * 9,因此我将其相应地分配在单个malloc中。 我需要在单个索引值中访问它 3x3协方差矩阵的9个值将根据其他2D数组中相应的行r和列c设置其值。
3回复

错误C2143和错误C2059在“ {”之前缺少“;”

我无法编译它。 我不知道发生了什么,对我来说似乎很好。 我得到的错误: XH X.cpp 哪里有问题?
4回复

需要大尺寸静态数组

我想要程序中的大型数组。 我的代码具有一个包含3个浮点类型变量的结构,我想要这种结构的大型3维数组。 我的代码为小型数组提供输出,但是当我增加数组的大小时,我会得到堆栈溢出异常/错误。 请帮忙。