Nirre
Nirre

Reputation: 75

How to scan every value in an array and compare it to every value in another array?

I'm new to the programming world and I would appreciate some help to finish an exercise.

Exercise goal: User guesses 10 numbers. The numbers are then stored in an array. Array is called "userGussedNumbers" in my program(it's not included down below). Then the program will generate 4 random numbers and store in an array "generatedWinningNumber". Now the program will compare the arrays and displays matches.

Problem i have: How do I compare both of these arrays and print out the winning numbers? There will be 4 winning numbers. You can see my solution down below but it stops when it gets the first match. I want it to keep scanning for more matches and display all matches if any matches found ofc.

private static void Main()
        {

        Random randomNumber = new Random();
        int[] generatedWinningNumber = new int[4];
        int temp;
           // Console.WriteLine("\nThese are the winning number...");

            for (int i = 0; i<generatedWinningNumber.Length; i++)
            {
                temp = randomNumber.Next(1, 26);
                generatedWinningNumber[i] = temp;
                
                

                if (userGussedNumbers.Intersect(generatedWinningNumber).Any())
                {
                    Console.WriteLine("\n Number {0} matched", userGussedNumbers[i]);
                }
                else
                {
                    
                    Console.WriteLine("No match!");
                }
            }


        }  

Upvotes: 1

Views: 163

Answers (2)

Carlos Oliveira
Carlos Oliveira

Reputation: 473

The Intersect method will give you a sequence with all the current winning numbers, so you can also try something like this.

    Random randomNumber = new Random();
    int[] generatedWinningNumber = new int[4];
        for (int i = 0; i<generatedWinningNumber.Length; i++)
        {
            generatedWinningNumber[i] = randomNumber.Next(1, 26);
        }
    
    var winningNumbers = userGussedNumbers.Intersect(generatedWinningNumber);
    if (winningNumbers.Any())
    {
        foreach(int number in winningNumbers) {
            Console.WriteLine("\nNumber {0} matched", number);
        }
    }
    else
    {
        Console.WriteLine("No match!");
    }

Upvotes: 0

Eric Warburton
Eric Warburton

Reputation: 329

If I understand your question correctly, you are saying that if one value is guessed correctly then all of them say they were guessed correctly.

I believe this is due to the .Intersect(...).Any(). I am not an expert on this function, but I believe it is returning true if any value in the arrays match. Perhaps just use .Contains() from System.Linq

using System.Linq;

Random randomNumber = new Random();
//int[] userGuessedNumbers = new int[10] { 9, 2, 15, 4, 11, 6, 7, 8, 2, 10 };
int[] generatedWinningNumber = new int[4];

for (int i = 0; i < generatedWinningNumber.Length; i++)
{
    //Removed unnecessary temp
    generatedWinningNumber[i] = randomNumber.Next(1, 26);

    //An easier way to format most strings in C# is by using $"string here {variablesHere}"
    if (userGuessedNumbers.Contains(generatedWinningNumber[i]))
        Console.WriteLine($"\nNumber {generatedWinningNumber[i]} matched!");
    else
        Console.WriteLine($"\nNo match to {generatedWinningNumber[i]}!");
}

Upvotes: 1

Related Questions