【问题标题】:How to go about reformatting my code to use an array?如何重新格式化我的代码以使用数组?
【发布时间】:2019-04-18 02:15:43
【问题描述】:

我基本上需要制作一个数组并将其放入私有成员部分,并让它在随机数生成器中工作。我什至不确定我的老师是否要求一个数组来保存 1000 个值,或者我是否需要为每个变量(零、一……)创建一个数组。标准规定使用私有成员数组来保存从调用随机生成器返回的值的计数。

3 小时的 youtube 视频。

class Gen
{
private:

    int Numbergenerated;

public:
    Gen();
    void set_Numbergenerated(int);
    int get_Numbergenerated();
    void gener();
    void display(int zero, int one, int two, int three, int four, int five, int six, int seven, int eight, int nine);
};


Gen::Gen()....

void Gen::set_Numbergenerated(int n)...

int Gen::get_Numbergenerated()...

void Gen::gener()
{
    int result_of_gener;

    result_of_gener = rand() % 10;                  

    set_Numbergenerated(result_of_gener);
}

void display....

int main()
{
Gen g;
    unsigned seed;
    int zero = 0, one = 0, two = 0, three = 0, four = 0, five = 0, six = 0, seven = 0, eight = 0, nine = 0, count, num;
    seed = time(0);
    srand(seed);                

    cout << "Press Enter key to begin generating numbers" << endl;
    cin.get();

    for (count = 0; count <= 1000; count++) 
    {
        g.gener();
        num = g.get_Numbergenerated();

        cout << "Generation " << "+" << count << ":\t" << "Number generated: " << num << endl;     

        switch (num)
        {
        case 0: zero++;
            break;.....

g.display(zero, one, two, three,four,five, six, seven, eight, nine);

`````````````

*******spots with ...... placed to save space, probably unimportant parts.

【问题讨论】:

  • 这听起来像是对实施所需的内容进行更多说明会有所帮助。
  • 我的理解是数组要创建1000个元素,然后要分配随机生成的数字,然后需要计算零、一、二等出现的次数跨度>

标签: c++ arrays


【解决方案1】:

用 1000 个元素填充数组后,您可以使用 count 函数来确定特定值在数组中出现的次数。方法如下。

所以,假设你使用 C++ arrays,我们可以在你的类的私有部分声明数组:

// An array of ints, with 1000 elements.
std::array<int,1000> randomNumberArray;

我们可以假设您的set_Numbergenerated 函数向数组中添加了一个新的随机数,因此,在main() 中,我们可以生成并插入 1000 个随机数:

/** Generate 1000 random numbers to fill the array. */
for (size_t i = 0; i < 1000; i++)
{
    g.gener();
}

由于我们的数组是私有成员,不能直接从main 访问,我们可以向Gen 添加一个公共成员函数来为我们访问数组。我们也可以通过这个方法告诉count数组中特定值的出现次数(很棒的C++algorithm):

// Return the number of occurrences of 'val' in the array.
int Gen::get_Occurrences(int val) {
    return std::count(this->randomNumberArray.begin(), this->randomNumberArray.end(), val);
}

最后,我们可以为每个感兴趣的数字(0 到 9)调用此方法,并将每个结果的结果提供给 main 中的 display 方法调用:

g.display(g.get_Occurrences(0), g.get_Occurrences(1), g.get_Occurrences(2), 
        g.get_Occurrences(3), g.get_Occurrences(4), g.get_Occurrences(5), 
        g.get_Occurrences(6), g.get_Occurrences(7), g.get_Occurrences(8), g.get_Occurrences(9));

这些和其他一些小的编辑产生了输出:

Press Enter key to begin generating numbers

Occurrences of each number [0 - 9]: 95 87 106 112 107 96 109 104 100 84

【讨论】:

    【解决方案2】:

    这个问题有点模棱两可。我试图尽可能多地保留你的代码,但我可能已经删除了作业中需要的部分。

    numberGenerated 是一个令人困惑的变量。似乎您要跟踪的更重要的是每个数字的频率。为此,我创建了一个由构造函数归零的 10 元素向量。

    然后,随着每个数字被存储到对象中,数组中对应的桶就会递增。

    请注意,构造函数还调用随机数生成器的种子函数。如果您有任何问题,请告诉我。

    #include <iostream>
    #include <random>
    #include <string>
    #include <vector>
    
    class Gen {
    private:
    
        int Numbergenerated;
        unsigned seed;
        std::vector<int> frequencies;
    
    public:
        Gen();
        void set_Numbergenerated(int);
        int get_Numbergenerated();
        void generate_random_number();
        void display();
    };
    
    Gen::Gen()
    {
      seed = time(0);
      srand(seed);
    
      for (int i = 0; i < 10; i++) {
        frequencies
            .push_back(0);// create and zero 10 buckets in our frequencies vector
      }
    }
    
    void Gen::set_Numbergenerated(int n)
    {
      Numbergenerated = n;
      frequencies[n] = frequencies[n] + 1;
    }
    
    int Gen::get_Numbergenerated()
    {
      return Numbergenerated;
    }
    
    void Gen::generate_random_number()
    {
      int result_of_generate;
      result_of_generate = rand() % 10;
      set_Numbergenerated(result_of_generate);
    }
    
    void Gen::display(){
      int sum = 0;
      for(int i = 0; i < 10; i++) {
        std::cout << i << "'s: " << frequencies[i] << " ";
        sum += frequencies[i];
      }
      std::cout << std::endl;
      std::cout << "Total generated: " << sum << std::endl;
    }
    
    int main()
    {
      Gen g;
    
      std::cout << "Press Enter key to begin generating numbers" << std::endl;
    //  std::cin.get();
    
      for (int count = 0; count < 1000; count++) {
        g.generate_random_number();
        int num = g.get_Numbergenerated();
    
        std::cout << "Generation " << "+" << count << ":\t" << "Number generated: "
                  << num << std::endl;
      }
      g.display();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-15
      • 2020-04-09
      • 2012-02-09
      • 2021-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多