简体   繁体   English

C# 如何在 do while 循环中更改列表索引值

[英]C# How to change list index value in do while loop

Using C# I wish to check the results of six games against a players prediction for the same six games.使用 C# 我希望对照相同六场比赛的玩家预测来检查六场比赛的结果。 The results and players predictions are captured using lists and a do-while loop.使用列表和 do-while 循环捕获结果和玩家预测。

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.目前,这被写了 6 次,因为我无法弄清楚如何在 do-while 循环中更改 List 索引值。

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;怎么可能通过 if 语句来检查; Results[0] against Results[1], then check Results[2] against [3], etc, with one do while loop?结果 [0] 对照结果 [1],然后检查结果 [2] 对照 [3] 等等,一个 do while 循环?

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] ?如何使用从 0 开始并每次执行增加 1 的列表索引i ,然后检查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循环,其中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";
    }
}

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.为了用结果遍历列表,我使用公式“i*2”和“(i*2) + 1”分别得到每个游戏的第一个和第二个结果。 So, you'll get in a for iteration of 6 steps:因此,您将获得 6 个步骤的 for 迭代:

  1. i = 0, position1 = i*2 = 0, position2 = (i*2) + 1 = 1. i = 0,位置1 = i*2 = 0,位置2 = (i*2) + 1 = 1。
  2. i = 1, position1 = i*2 = 2, position2 = (i*2) + 1 = 3. i = 1,位置1 = i*2 = 2,位置2 = (i*2) + 1 = 3。
  3. i = 2, position1 = i*2 = 4, position2 = (i*2) + 1 = 5. i = 2,位置1 = i*2 = 4,位置2 = (i*2) + 1 = 5。
  4. i = 3, position1 = i*2 = 6, position2 = (i*2) + 1 = 7. i = 3,位置 1 = i*2 = 6,位置 2 = (i*2) + 1 = 7。
  5. i = 4, position1 = i*2 = 8, position2 = (i*2) + 1 = 9. i = 4,位置 1 = i*2 = 8,位置 2 = (i*2) + 1 = 9。
  6. i = 5, position1 = i*2 = 10, position2 = (i*2) + 1 = 11. i = 5,位置1 = i*2 = 10,位置2 = (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.此外,我使用与结果列表长度相同的数组管理 resultsG,因此我也可以遍历该数组以打印结果。

As said before, the 'i' in the loop can be manipulated inside the loop, so you can use如前所述,循环中的“i”可以在循环内部进行操作,因此您可以使用

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM