【问题标题】:C# How to change list index value in do while loopC#如何在do while循环中更改列表索引值
【发布时间】:2019-10-21 15:10:41
【问题描述】:

使用 C# 我希望根据玩家对相同六场比赛的预测来检查六场比赛的结果。使用列表和 do-while 循环捕获结果和玩家预测。

然后检查每场比赛的结果,看是主队赢、客队赢还是平局。目前,这被写了 6 次,因为我无法弄清楚如何在 do-while 循环中更改 List 索引值。

如何缩短结果检查器?

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

如何运行 if 语句来检查; Results[0] 对照 Results[1],然后用一个 do while 循环检查 Results[2] 对照 [3] 等等?

【问题讨论】:

    标签: c# arraylist do-while


    【解决方案1】:

    这就是我所做的

                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 个步骤的 for 迭代:

    1. i = 0, position1 = i*2 = 0, position2 = (i*2) + 1 = 1。
    2. i = 1,位置1 = i*2 = 2,位置2 = (i*2) + 1 = 3。
    3. i = 2,位置1 = i*2 = 4,位置2 = (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。

    另外,我用一个与结果列表长度相同的数组管理 resultsG,所以我也可以遍历这个数组来打印结果。

    【讨论】:

    • 谢谢,莎拉 - 感谢您的解释。
    • 乐于助人:)
    【解决方案2】:

    如前所述,循环中的'i'可以在循环内部进行操作,所以可以使用

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

    【讨论】:

      【解决方案3】:

      如何使用列表索引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";
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-28
        • 2015-02-16
        • 2021-05-22
        • 2018-05-09
        • 1970-01-01
        • 2016-09-23
        • 2021-10-24
        • 1970-01-01
        相关资源
        最近更新 更多