【问题标题】:Calling methods with arrays in C++在 C++ 中使用数组调用方法
【发布时间】:2016-07-28 12:16:53
【问题描述】:

我的问题是我无法在 int main() 中调用 int computePattern 方法。我可以使用insertNumber 方法。但我不知道如何使用computePattern 方法。该方法是计算模式的数量并返回计数。模式是两个相邻的数字必须大于 7。因此,只有 5 对要检查,因为有 10 个数字。现在输出只是有效的随机数组,但我也需要打印出模式的数量。我需要使用问题中需要的方法。

int insertNumber(int b )
{
 int a = rand()%10+1;
 return a;
}
int computePattern(int* inArray, int size )
{
int patterns=0;
 for(int z=0;z<size;z=z+2)
 {
    if(inArray[z]+inArray[z+1]>7)
    {
        patterns ++ ;
    }
}
 return patterns;
}
int main()
{
int arrays[10];
srand(time(0));
for ( int b=0; b<10 ; b++)
{
 arrays[b]  = insertNumber(b);
}
cout << "Arrays";
for ( int c= 0; c<10; c++)
{
    cout << " " ;
    cout << arrays[c];
}
int patterns =computePattern(arrays,10);
cout<<endl;
cout << "Patterns" <<patterns;
}

【问题讨论】:

  • 正确缩进的代码会很好。
  • 我认为你的意思是 (int d=0; d
  • 另外,数组在每种方法中都是不同的实例。您可能希望该变量为文件范围。你可以声明 int arrays[10];在任何功能描述之前
  • 您没有将数组传递给您的函数!它正在检查垃圾值。

标签: c++ c arrays methods


【解决方案1】:

computePattern 中的数组仍未初始化。因此,它会在内存中包含随机变量,这会打乱你的计算路径。

您应该将函数修改为int computePattern(int z, int array[])。然后从主范围传递array

【讨论】:

  • 可能想提一下,使用未初始化变量的值是未定义的行为。
  • 使用指针将数组发送到函数(f(array[]) 就是这样,一个指针!)不是一个好主意。更好的是数组引用(f(int(&amp;tab)[10])),更好的是std::arraystd::vector
【解决方案2】:

main 中的数组与 computePattern 中的数组不同。仅仅因为它们共享一个名称并不意味着它们是同一个变量。它们中的每一个都是功能范围。更好的方法是传入数组的地址和大小。

int computePattern(int* inArray, int size)
{
    int patterns=0;
    for(int z=0; z<size-1; z+=2)
    {
        if((inArray[z] + inArray[z+1]) > 7)
        {
            patterns++;
        }
    }
    return patterns;
}
//... then in main...

int patterns=computePattern(arrays, 10);
cout << patterns;

【讨论】:

  • 顺便说一句......正如你所拥有的,computePattern 函数只检查每一对并排的值。它可以找出第一个和第二个值何时大于7,但它不会找出第二个和第三个值何时加起来大于7。
猜你喜欢
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多