【问题标题】:Matching Numbers in 2 arrays c++匹配2个数组中的数字c ++
【发布时间】:2013-12-01 11:24:50
【问题描述】:

我正在编写一个程序,旨在比较 2 个数组中的数字并输出匹配的数量。

RandomNumber.h

#pragma once
#include <iostream>
#include <cstdlib>
#include <ctime>


class RandomNumber
{
public:
    void randomNumber();
    int actualRandomNumber;
};

RandomNumber.cpp

#include "RandomNumberGenerator.h"

void RandomNumber::randomNumber()
{
    actualRandomNumber = rand() % 66 + 1;
}

Game.h

#include "RandomNumberGenerator.h"


class Game
{
private:

    int randomNumbers[6];

public:

    void generateRandomNumbers();
    void compareNumbers2();

};

Game.cpp

void Game::generateRandomNumbers()
{
    RandomNumber create;

    for (int i = 0; i < 6; i++)
    {
        create.randomNumber();
        randomNumbers[i] = create.actualRandomNumber;   
    }

    for (int i = 0; i < 6; i++)
    {
        std::cout << randomNumbers[i] << "   ";
    }
}

void Game::compareNumbers2()
{
    int k = 0;

    for (int i = 0; i < 6; ++i)
    {
        for (int j = 0; j < 6; ++j)
        {
            if (randomNumbers[i] == randomNumbers[j])
            {
                k++;
            }
        }
    }

    if (k > 0)
    {
        std::cout << "Congratulations you matched: " << k << " number(s)";
    }

    if (k == 0)
    {
        std::cout << "Unfortunatly you matched: " << k << " numbers";
    }
}

Main.cpp

#include "Game.h"
#include "RandomNumberGenerator.h"

int main()
{
    Game play;

    srand (time(NULL));

    play.generateRandomNumbers(); 
    std::cout << std::endl << std::endl;

    play.generateRandomNumbers();
    std::cout << std::endl << std::endl;

    play.compareNumbers2(); 

    system("pause");
    return 0;
}

我遇到的问题不在于创建数组并填充它们,我得到两个填充数组,其中包含 2 组不同的随机数,但由于某种原因,在比较它们时,它告诉我的匹配数是总是大约 6 或 8 个,而事实上我很少有超过一两个。

【问题讨论】:

  • 你忘记了缩进。

标签: c++ arrays random


【解决方案1】:

最明显的问题是你只有一个数组。

class Game
{
    ...
    int randomNumbers[6];

你认为第二个数组在哪里?

【讨论】:

  • 是的,这是一个愚蠢的错误,非常感谢您指出,现在通过创建第二个数组使其工作
【解决方案2】:

根据您的代码,我只看到了 1 个数组。在函数 compareNumber2() 中,您将每个数字与它进行一次比较。因此,结果是元素的数量(例如,6)。

【讨论】:

    【解决方案3】:

    您不会不比较两个数组。您将一个数组(Game 类的数据成员)与其自身进行比较。您只需填写两次即可。

    【讨论】:

      【解决方案4】:

      查看代码,我可以说您将一直得到 6 个匹配项,因为您的 randomNumbers 数组将在第二步中被覆盖(当您第二次尝试生成随机数时)

      【讨论】:

        【解决方案5】:

        其实有两个更大和更小的问题:

        1. 您正在将您的数组 int randomNumbers[6] 与其自身进行比较。

        2. 请不要调用对象create。这是非常错误的习惯。调用 RandomNumber 类的对象,即 randomNumber 并从中获取随机数,如下所示:

          randomNumber.getValue()

        通常尝试用动词来调用方法,用名词来调用对象,你不觉得会更自然吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-12
          • 2017-07-01
          相关资源
          最近更新 更多