1

Using C# I wish to check the results of six games against a players prediction for the same six games. The results and players predictions are captured using lists and a do-while loop.

The result for each game is then checked to see if it was a Home Win, Away Win or Draw. Currently, this is written out 6 times, as I cannot work out how to change the List index value in a do-while loop.

How can the result checker be shortened?

        string ResultsG1, ResultsG2, ResultsG3, ResultsG4, ResultsG5, ResultsG6;

        int resultsGameWeek = 1;
        List<int> Results = new List<int>();
        do
        {
            Console.Write("RG" + resultsGameWeek + "H: ");
            Results.Add(Convert.ToInt32(Console.ReadLine()));

            Console.Write("RG" + resultsGameWeek + "A: ");
            Results.Add(Convert.ToInt32(Console.ReadLine()));

            resultsGameWeek++;
        } while (resultsGameWeek <= 6);



        // RESULTS CHECKER (HW/AW/D?)
        // Result.Game 1
        if (Results[0] > Results[1])
        {
            Console.WriteLine("HW");
            ResultsG1 = "HW";
        }
        else if (Results[0] < Results[1])
        {
            Console.WriteLine("AW");
            ResultsG1 = "AW";
        }
        else
        {
            Console.WriteLine("D");
            ResultsG1 = "D";

        }

        // Result.Game2
        if (Results[2] > Results[3])
        {
            Console.WriteLine("HW");
            ResultsG2 = "HW";
        }
        else if (Results[2] < Results[3])
        {
            Console.WriteLine("AW");
            ResultsG2 = "AW";
        }
        else
        {
            Console.WriteLine("D");
            ResultsG2 = "D";

        }

        // Result.Game3
        if (Results[4] > Results[5])
        {
            Console.WriteLine("HW");
            ResultsG3 = "HW";
        }
        else if (Results[4] < Results[5])
        {
            Console.WriteLine("AW");
            ResultsG3 = "AW";
        }
        else
        {
            Console.WriteLine("D");
            ResultsG3 = "D";

        }

        // Result.Game4
        if (Results[6] > Results[7])
        {
            Console.WriteLine("HW");
            ResultsG4 = "HW";
        }
        else if (Results[6] < Results[7])
        {
            Console.WriteLine("AW");
            ResultsG4 = "AW";
        }
        else
        {
            Console.WriteLine("D");
            ResultsG4 = "D";

        }

        // Result.Game5
        if (Results[8] > Results[9])
        {
            Console.WriteLine("HW");
            ResultsG5 = "HW";
        }
        else if (Results[8] < Results[9])
        {
            Console.WriteLine("AW");
            ResultsG5 = "AW";
        }
        else
        {
            Console.WriteLine("D");
            ResultsG5 = "D";

        }

        // Result.Game6
        if (Results[10] > Results[11])
        {
            Console.WriteLine("HW");
            ResultsG6 = "HW";
        }
        else if (Results[10] < Results[11])
        {
            Console.WriteLine("AW");
            ResultsG6 = "AW";
        }
        else
        {
            Console.WriteLine("D");
            ResultsG6 = "D";

        }

        Console.WriteLine("ResultsG1 = " + ResultsG1);
        Console.WriteLine("ResultsG2 = " + ResultsG2);
        Console.WriteLine("ResultsG3 = " + ResultsG3);
        Console.WriteLine("ResultsG4 = " + ResultsG4);
        Console.WriteLine("ResultsG5 = " + ResultsG5);
        Console.WriteLine("ResultsG6 = " + ResultsG6);
        Console.ReadLine();

How would it be possible to run through the if statements to check; Results[0] against Results[1], then check Results[2] against [3], etc, with one do while loop?

3 Answers 3

2

This is what I did

            int games = 6;

            string[] results_per_game = new string[games];

            int resultsGameWeek = 1;
            List<int> Results = new List<int>();
            do
            {
                Console.Write("RG" + resultsGameWeek + "H: ");
                Results.Add(Convert.ToInt32(Console.ReadLine()));

                Console.Write("RG" + resultsGameWeek + "A: ");
                Results.Add(Convert.ToInt32(Console.ReadLine()));

                resultsGameWeek++;
            } while (resultsGameWeek <= games);

            int result1 = 0;
            int result2 = 0;
            for (int i = 0; i < games; i++)
            {
                result1 = Results[i * 2];
                result2 = Results[(i * 2) + 1];
                if (result1 > result2)
                {
                    Console.WriteLine("HW");
                    results_per_game[i] = "HW";
                }
                else if (result1 < result2)
                {
                    Console.WriteLine("AW");
                    results_per_game[i] = "AW";
                }
                else
                {
                    Console.WriteLine("D");
                    results_per_game[i] = "D";
                }
            }

            for (int i = 0; i < results_per_game.Length; i++)
            {
                int nextResultGame = i + 1;
                Console.WriteLine("ResultsG" + nextResultGame + " = " + results_per_game[i]);
            }
            Console.ReadLine(); 

To iterate through the list with results, I used the formula "i*2" and "(i*2) + 1" to get the first and second result of each game, respectively. So, you'll get in a for iteration of 6 steps:

  1. i = 0, position1 = i*2 = 0, position2 = (i*2) + 1 = 1.
  2. i = 1, position1 = i*2 = 2, position2 = (i*2) + 1 = 3.
  3. i = 2, position1 = i*2 = 4, position2 = (i*2) + 1 = 5.
  4. i = 3, position1 = i*2 = 6, position2 = (i*2) + 1 = 7.
  5. i = 4, position1 = i*2 = 8, position2 = (i*2) + 1 = 9.
  6. i = 5, position1 = i*2 = 10, position2 = (i*2) + 1 = 11.

Also, I managed the resultsG with an array the same length of the List of results, so I can iterate through this array to print the results too.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, Sarah - appreciate the explanation.
Happy to help :)
1

How about by using list index i which starts at 0 and increases by 1 each execution, and then checking Results[i*2] vs Results[i*2+1]? This approach would let you use a for loop, where i is the number of results you want to check.

for(int i=0; i<game_count; i++) {
  if (Results[i*2] > Results[i*2+1])
    {
      Console.WriteLine("HW");
      ResultsG1 = "HW";
    }
    else if (Results[i*2] < Results[i*2+1])
    {
      Console.WriteLine("AW");
      ResultsG1 = "AW";
    }
    else
    {
      Console.WriteLine("D");
      ResultsG1 = "D";
    }
}

Comments

1

As said before, the 'i' in the loop can be manipulated inside the loop, so you can use

for(int i = 0; i < 6;i++)
{
    ...
    'i' can be manipulated as whatever
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.