如何在两个数组中添加元素,但顺序相反?

时间:2015-04-03 23:17:01

标签: c++ arrays nested-loops decrement

此代码的目的是在两个数组中添加元素,但顺序相反。 我不明白我为此做错了不编译(语法,循环或数组错误??)。你能指出我正确的方向吗?谢谢!!

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
    const int ARRAY1_LEN = 3;
    const int ARRAY2_LEN = 2;

    int MyInts1[ARRAY1_LEN] = { 35, -3, 0};
    int MyInts2[ARRAY2_LEN] = {20, -1};

    cout << "Multiplying each int in MyInt1 by each in MyInts2 ... But Backwards:" << endl;

    for(int Array1Index = 0; Array1Index < ARRAY1_LEN - 1; Array1Index--);
        for(int Array2Index = 0; Array2Index < ARRAY2_LEN -1; Array2Index--);
        cout << MyInts1[Array1Index] << " x " << MyInts2[ Array2Index ] << " = " << MyInts1[Array1Index] * MyInts2[Array2Index] << endl;

        return 0;
}

2 个答案:

答案 0 :(得分:0)

你的逻辑不正确。您从索引0开始,然后向后退。这意味着,您输入的是负范围(-1,-2,-3,...),每个负数都满足循环条件。

它应该是:

int main()
{
    const int ARRAY1_LEN = 3;
    const int ARRAY2_LEN = 2;

    int MyInts1[ARRAY1_LEN] = { 35, -3, 0 };
    int MyInts2[ARRAY2_LEN] = { 20, -1 };

    cout << "Multiplying each int in MyInt1 by each in MyInts2 ... But Backwards:" << endl;

    int start_1 = ARRAY1_LEN > 0 ? ARRAY1_LEN - 1 : 0;
    int start_2 = ARRAY2_LEN > 0 ? ARRAY2_LEN - 1 : 0;

    for(int Array1Index = start_1; Array1Index >= 0; Array1Index--)
    {
        for(int Array2Index = start_2; Array2Index >= 0; Array2Index--)
        {
            cout << MyInts1[Array1Index] << " x " << MyInts2[ Array2Index ] << " = " << MyInts1[Array1Index] * MyInts2[Array2Index] << endl;
        }
    }

    return 0;
}

如果至少有一个数组为空,则此代码也能正常工作。

哦,还有一件事:你的代码也完全错了,因为你在;之后有分号(for),这意味着每个循环都有一个空体。所以,即使你的for是正确的,你仍然无法看到任何东西。

答案 1 :(得分:0)

您的计划中有两个错误:

  1. 整个循环体只包含for循环后面的分号,而不是你想要在循环内运行的代码。这也解释了为什么你的代码没有编译:你的乘法不是循环体的一部分,因此Array1IndexArray2Index - 在循环标题中定义 - 不再存在。
  2. 虽然您正在减少arry索引,但仍然从0开始,因此您将访问负数组索引。
  3. 所以你的代码实际上应该是这样的:

    for (int Array1Index = ARRAY1_LEN - 1 ; Array1Index >= 0; Array1Index--){
        for (int Array2Index = ARRAY2_LEN - 1; Array2Index >=0; Array2Index--){
            cout << MyInts1[Array1Index] << " x " << MyInts2[Array2Index] << " = " << MyInts1[Array1Index] * MyInts2[Array2Index] << endl;
        }
    }