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

#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

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