Matching Numbers in 2 arrays c++

2019-08-14 16:41发布

问题:

I'm writing a program which is intended to compare the numbers in 2 arrays and output the number of matches that there are.

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;
}

The problem I'm having isn't in creating the arrays and filling them, I get two filled arrays with 2 different sets of random numbers, but for some reason when comparing them the number of matches it tells me I have is always about 6 or 8 when I in fact rarely have more than one or two if that.

回答1:

The most obvious problem is that you only have one array.

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

Where did you think the second array was?



回答2:

Based on your code, I saw only 1 array. And in the function compareNumber2(), you compare each number with it once. Therefore, the result is the number of elements (e.g, 6).



回答3:

Looking at code, I can say you will be getting 6 matches all the time, since you randomNumbers array will be overwritten in second step (when you try to generate random numbers second time)



回答4:

There are actually two problems bigger and smaller:

  1. You're comparing your array int randomNumbers[6] with itself.

  2. Please don't call the object create. Its very wrong habit. Call the object of class RandomNumber i.e a randomNumber and take your random number from it like:

    randomNumber.getValue()

Usually try to call the methods with verbs and objects with nouns it will be more natural don't you think?



回答5:

You do no not compare two arrays. You compare one array, data member of class Game, with itself. You simply fill it two times.