Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comparing in Array

Tags:

c#

There is something wrong with my code. I am teaching myself c# and one of the challenges in this chapter was to prompt the user for 10 numbers, store them in an array, than ask for 1 additional number. Then the program would say whether the additional number matched one of the numbers in the array. Now what I have below does work, but only if I enter in a comparison number that is less than 10 which is the size of the array.

I'm not sure how to fix it. I am not sure how to do the comparison. I tried a FOR loop first which kind of worked, but ran through the loop and displayed the comparison against all 10 numbers so you would get 9 lines of No! and 1 line of Yes!. I put in a break; which stopped it counting all 10 but if I entered the number 5 for comparison, then I would get 4 lines of No! and 1 of Yes!. The below has been the only way I could get it to work reliably but only as long as the number isn't out of the bounds of the array.

I can see why I get the error when the number is above 10, I just don't know what to use to compare it but still allow the user to enter in any valid integer. Any assistance would be great!

        int[] myNum = new int[10];
        Console.WriteLine("Starting program ...");
        Console.WriteLine("Please enter 10 numbers.");

        for (int i = 0; i <= 9; ++i)
        {
            Console.Write("Number {0}: ", i + 1);
            myNum[i] = Int32.Parse(Console.ReadLine());
        }

        Console.WriteLine("Thank you.  You entered the numbers ");
        foreach (int i in myNum)
        {
            Console.Write("{0} ", i);
        }

        Console.WriteLine("");
        Console.Write("Please enter 1 additional number: ");
        int myChoice = Int32.Parse(Console.ReadLine());
        Console.WriteLine("Thank you.  You entered the number {0}.", myChoice);

        int compareArray = myNum[myChoice - 1];

        if (compareArray == myChoice)
        {
            Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
        }
        else
        {
            Console.WriteLine("No!  The number {0} is not equal to any of the entered numbers.", myChoice);
        }

        Console.WriteLine("End program ...");

        Console.ReadLine();
like image 671
Trido Avatar asked Sep 04 '26 13:09

Trido


2 Answers

You were on the right track- you want to loop through the array in myNum and compare each element to the variable myChoice. If you don't want to print whether each element of the array is a match, create a new variable and use it to keep track of whether you've found a match or not. Then after the loop you can check that variable and print your finding. You'd usually use a bool variable for that- set it false to start, then true when you find a match.

bool foundMatch = false;
for (int i = 0; i < 10; i++) {
    if (myNum[i] == myChoice) {
        foundMatch = true;
    }
}
if (foundMatch) {
    Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
}
like image 171
Japple Avatar answered Sep 07 '26 04:09

Japple


If you include the System.Linq namespace (or if you change the type of myNum to be something that implements ICollection<T>, like List<T>), you can use myNum.Contains(myChoice) to see if the value myChoice matches one of the values in myNum. array.Contains returns a boolean that is true if the specified value is found in the array and false if it is not.

You can update your code to use this like so:

   //int compareArray = myNum[myChoice - 1]; // This line is no longer needed

    if (myNum.Contains(myChoice))
    {
        Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
    }
    else
    {
        Console.WriteLine("No!  The number {0} is not equal to any of the entered numbers.", myChoice);
    }
like image 23
Jon Senchyna Avatar answered Sep 07 '26 03:09

Jon Senchyna



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!