C # Как изменить значение индекса списка в цикле do while - PullRequest
0 голосов
/ 21 октября 2019

Используя C #, я хочу сравнить результаты шести игр с прогнозами игроков на те же шесть игр. Результаты и прогнозы игроков фиксируются с помощью списков и цикла do-while.

Затем проверяется результат для каждой игры, чтобы увидеть, был ли это Хоум-победа, победа на выезде или ничья. В настоящее время это записано 6 раз, так как я не могу понять, как изменить значение индекса списка в цикле do-while.

Как можно сократить проверку результатов?

        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();

Как можно было бы пройти через операторы для проверки;Results [0] против Results [1], затем проверьте Results [2] против [3] и т. Д. С одним циклом do while?

Ответы [ 3 ]

1 голос
/ 21 октября 2019

Это то, что я сделал

            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(); 

Чтобы перебрать список с результатами, я использовал формулы «i * 2» и «(i * 2) + 1», чтобы получить первое и второерезультат каждой игры соответственно. Таким образом, вы получите за итерацию 6 шагов:

  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, позиция1 = i * 2 = 6, позиция2 = (i * 2) + 1 = 7.
  5. i = 4, позиция1 = i* 2 = 8, позиция 2 = (i * 2) + 1 = 9.
  6. i = 5, позиция 1 = i * 2 = 10, позиция 2 = (i * 2) + 1 = 11.

Кроме того, я управлял результатамиG с массивом такой же длины, что и список результатов, поэтому я могу перебирать этот массив, чтобы выводить результаты тоже.

1 голос
/ 25 октября 2019

Как уже говорилось ранее, «i» в цикле можно манипулировать внутри цикла, поэтому вы можете использовать

for(int i = 0; i < 6;i++)
{
    ...
    'i' can be manipulated as whatever
}
1 голос
/ 21 октября 2019

Как насчет использования списка индекса i, который начинается с 0 и увеличивается на 1 при каждом выполнении, а затем проверяется Results[i*2] против Results[i*2+1]? Этот подход позволит вам использовать цикл for, где i - это количество результатов, которые вы хотите проверить.

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