C++ 如何在两个数组中按相反顺序添加元素?
这段代码的目的是在两个数组中添加元素,但顺序相反。我不明白我做错了什么,因为我没有编译语法、循环或数组错误??。你能给我指一下正确的方向吗?谢谢C++ 如何在两个数组中按相反顺序添加元素?,c++,arrays,nested-loops,decrement,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
#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;
}
你的逻辑不正确。您从索引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是正确的,您也不会看到任何东西。您的程序中有两个错误: 整个循环体只包含for循环后面的分号,而不是实际要在循环中运行的代码。这也解释了代码无法编译的原因:乘法运算不是循环体的一部分,因此在循环头中定义的Array1Index和Array2Index不再存在。 虽然正在减少阵列索引,但仍然从0开始,因此将访问负数组索引。 因此,您的代码实际上应该如下所示:
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;
}
}
你从索引0开始,一直向后走。看起来你认为把a++改成a-是你所要做的一切。在for体中什么都不做…你的代码不应该编译-请发布你的实际代码code@JosephMansfield那么我需要设置什么样的Array1Index和Array2Index呢?@MikeMB这是它没有编译的东西,我不明白为什么。@MateuzGrzejek谢谢!这个答案有几个问题。首先,您正在从ARRAY1_LEN计算start_2。其次,由于数组的长度必须始终大于0,因此无需计算start_1和start_2。第三,for循环条件应为>=,否则将不使用第一个元素。@JosephMansfield是的,我注意到了,谢谢。复制粘贴在代码方面可能很棘手:已经修复。此外,计算start_1和start_2是有用的,并且比将类似于ARRAY1_LEN-1的东西放在内存中更好。它对于调试过程也很方便,没有理由引入额外的逻辑。如果实际上,无论出于何种原因,如果ARRAY1_LEN为零或更小,那么只要程序编译,int start_1=ARRAY1_LEN>0,编译器就会产生错误?阵列1_LEN-1:0;将始终计算为int start_1=ARRAY1_LEN-1。即使编译器不会产生错误,零或负数组长度也会导致循环体永远不会执行。因此,如果您真的认为必须为最后一个有效索引引入别名,那么您可能至少应该忽略三元语句。代码中有一个错误:您正在访问MyInts1[ARRAY1_LEN],这是一个错误。这种元素不存在。