0

我有一个球员号码列表(int list),我也有一些圈数(int laps)。每次玩家完成一圈时,我都必须在文本框中输入玩家的号码。如果有效,在文本框中输入的玩家号码将被发送到列表中。但是,每个玩家的编号不能超过圈数。

我是 Windows 窗体的新手,所以我只使用列表来解决问题,我见过人们使用字典来解决类似的问题,但我不太确定如何结合它来解决这个问题。

    private void textBox2_TextChanged(object sender, EventArgs e)
    {

        bool result;
        int RunnerNumberInOrder;

        repeat2 = (getLaps2 * rows2);
        textBox2.Focus();

        //ReadPlayerNumber is the list that contains the list of the runners in the race. 
        //PlayerNumberInOrder int list is a global list and it is the list that the runners number order gets sent to if valid

        result = int.TryParse(textBox2.Text, out RunnerNumberInOrder); //checks if the value entered is an integer


        if (result == false || !ReadRunnerNumbers2.Contains(RunnerNumberInOrder)) //if the value entered is not an integer an error message will pop up and ask to enter a valid number
        {
            label3.Text = "Please enter a valid player number from the list";

        }

        else
        {
            if (RunnerOrder.Contains(RunnerNumberInOrder))
            {

                count++;
            }

            if (count == getLaps2)
            {
                count = 0;
                label3.Text = "max laps for this runner has been entered";


                invalid.Add(RunnerNumberInOrder); //invalid is an int list that I used to send the numbers of the runners that have completed all laps. 


                textBox2.Clear();
                return;

            }

        }

        if (invalid.Contains(RunnerNumberInOrder))
        {
            MessageBox.Show("Max number of laps for this runner has been entered");
            textBox2.Clear();
        }

        if (result == true && ReadRunnerNumbers2.Contains(RunnerNumberInOrder) && !invalid.Contains(RunnerNumberInOrder))
        {
            RunnerOrder.Add(RunnerNumberInOrder); //if number entered is valid, the it is added to the global variable             
            PlayerNumbersEntered++;
            label8.Text = RunnerNumberInOrder.ToString();//counts how many valid car numbers have been enterted
            textBox2.Clear();
        }


    }

我的代码有点用,但是当圈数为 3 时,它有时只允许一个数字 2 次,有时会允许超过输入的圈数。当玩家的圈数等于圈数并且不应再允许该数字时,我希望弹出一条错误消息。我还必须使用 text_change。提前为帮助喝彩。

4

1 回答 1

0

我认为在您的代码中看到的主要问题是该count变量似乎是一个全局变量,但您似乎使用它就像计算特定的 RunnerNumbers。

在我看来,您可以通过创建一个具有数字 ID 和 Count 的 Runners 类来解决这个问题,或者更简单的是,只需在旅途中获取该跑步者的计数,如下所示:

specificRunnerCount = RunnerOrder.Where(x => x == RunnerNumberInOrder).Count()

有了这个,你可以修改你的代码是这样的:

int specificRunnerCount = RunnerOrder.Where(x => x == RunnerNumberInOrder).Count();
if ((specificRunnerCount + 1) == getLaps2)  // +1 because we haven't added this number to the count yet.
{
    label3.Text = "max laps for this runner has been entered";
    invalid.Add(RunnerNumberInOrder); 
    textBox2.Clear();
    return;
}
// Continue code as is

此外,从您的代码中,您向无效列表添加值的代码部分:invalid.Add(RunnerNumberInOrder);您使用return结束函数的语句。因此,我认为您不需要检查无效列表中是否包含跑步者编号if (invalid.Contains(RunnerNumberInOrder))

希望这对您有所帮助。

于 2019-07-19T10:59:32.013 回答