C#使用class和listbox时出现问题

时间:2017-10-26 10:45:50

标签: c# class listbox

创建一个Visual C#应用程序,该应用程序在ListBox控件中显示Teams.txt文件的内容。当用户在ListBox中选择一个团队时,该应用程序应显示该团队在1903年至2012年的时间段内赢得世界大赛的次数。

使用的两个文件是Teams.txt,其中包含至少赢过一次冠军的球队名单,以及WorldSeriesWinners.txt - 此文件包含1903年世界系列赛冠军队的时间顺序列表 - 该文件的第一行是1903年赢得的球队的最后一行,最后一行是2012年赢得的球队名称。请注意,世界系列赛没有在1904年或1994年参赛。 这是我遇到问题的问题。实际上在这个问题中我必须使用类,但代码不起作用

这是我的代码。我希望你能帮助我找到问题 这是课程部分

class WorldSeries
{
    // Field
    private string _wins;    // The team's total number of wins.

    // Constructor
    public WorldSeries()
    {
        _wins = "";
    }

    // Wins property
    public string Wins
    {
        get { return _wins; }
        set { _wins = value; }
    }
}

这是我的其余代码

    // Variables
    string teamName;                    // To hold the teams names.


    private void ReadTeams()
    {
        try
        {
            // Local Variables
            StreamReader inputTeams;    //To read the file

            // Open the Teams.txt file.
            inputTeams = File.OpenText("Teams.txt");

            // Read the file's contents.
            while (!inputTeams.EndOfStream)
            {
                // Read a line and add it to the ListBox.
                teamName = inputTeams.ReadLine();
                lst_teams.Items.Add(teamName);
            }
            // Close the file.
            inputTeams.Close();
        }
        catch (Exception ex)
        {
            // Display an error message.
            MessageBox.Show(ex.Message);
        }
    }


    private void GetTeamWin (WorldSeries worldSeries)
    {
        try
        {
            //Local Variables
            int index=0;      // Loop counter, initialized to 0.
            int winCount = 0; // Accumulator, initialized to 0.

            // Open the WorldSeriesWinners.txt file.
            StreamReader inputFile=File.OpenText
            ("WorldSeriesWinners.txt")

            // Create a List object to hold strings.
            List<string> winnerList = new List<string>();

            // Read the file's contents
            while (!inputFile.EndOfStream)
            {
                // Read a line and add it to the list.
                winnerList.Add(inputFile.ReadLine());
            }

            // Sort the items in the List.
            winnerList.Sort();

            while (index >=0)
            {
                // Search the team name in the List
                index = winnerList.BinarySearch(teamName);
                winCount++;

                // Remove the team name from the List
                winnerList.RemoveAt(index);
            }

            // Store the total number of wins of the team in the Wins
            // parameter.
            worldSeries.Wins = winCount.ToString();

            // Clear the List
            winnerList.Clear();

            // Display the number of times the team has won.
            lbl_results.Text = "The" + lst_teams.SelectedItem.ToString()                        
            + "has won the World Series" +
            winCount + "time(s), between 1903 and 2012.";

        }
        catch (Exception ex)
        {
            // Display an error message.
            MessageBox.Show(ex.Message);
        }
    }

    private void btn_Exit_Click(object sender, EventArgs e)
    {
        // Close the file.
        this.Close();
    }
}

1 个答案:

答案 0 :(得分:0)

团队胜利的数量很小,足以容纳内存。您可以读取整个文件一次,并将团队名称的字典存储到内存中的获胜次数。像这样:

Dictionary<string, int> numberOfWins =
                    File.ReadAllLines("WorldSeriesWinners.txt")
                    .GroupBy(t => t)
                    .ToDictionary(g => g.Key, g => g.Count() );

然后您可以使用简单的函数检查所选团队是否在此列表中并返回否则获胜,如果不是,则返回零:

private int GetNoOfWins(string teamName)
{
    if (numberOfWins.ContainsKey(teamName))
    {
        return numberOfWins[teamName];
    }
    else
    {
        return 0
    }
}

可以在您现有的代码中轻松使用:

int winCount = GetNoOfWins(lst_teams.SelectedItem.ToString());
lbl_results.Text = "The" + lst_teams.SelectedItem.ToString()
            + "has won the World Series" +
            winCount + "time(s), between 1903 and 2012.";