2015-05-05 33 views
0

全部。我正在創建一個程序,將團隊列表視爲字符串數組,並將其與包含所有世界大賽獲勝者列表的.txt文件進行比較,並確定團隊根據哪個團隊贏得世界大賽的次數在列表框中選擇。C#listbox數組問題

我的代碼拋出了0個錯誤,我第一次運行程序並選擇了一個團隊,點擊它顯示的消息框顯示團隊名稱和他們贏了多少次的按鈕。之後,每當我再次選擇一個團隊並點擊按鈕時,什麼都不會發生。它只是凍結。我必須停止調試。可能發生了什麼可能會出錯?任何想法和建議?

namespace WorldSeriesWinners 
{ 
    public partial class Form1 : Form 
    { 
     string[] inputTeams = 
     { 
      "Boston Americans", "New York Giants", "Chicago White Sox","Chicago Cubs", 
      "Pittsburgh Pirates", "Philadelphia Athletics","Boston Red Sox", "Boston Braves", 
      "Cincinatti Reds", "Cleveland Indians","Brooklyn Dodgers", 
      "New York Yankees", "Washington Senators", 
      "St. Louis Cardinals","Detroit Tigers", "Milwaukee Braves", 
      "Los Angeles Dodgers", "New York Mets", "Baltimore Orioles", 
      "Oakland Athletics", "Philadelphia Phillies", "Kansas City Royals", "Minnesota Twins", "Toronto Blue Jays", 
      "Atlanta Braves", "Florida Marlins", "Arizona Diamondbacks", "Anaheim Angels", "San Francisco Giants" 
     }; 

    string[] worldseriesWinners = new string[104]; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     listBox1.Items.AddRange(inputTeams); 
    } 



    private void button2_Click(object sender, EventArgs e) 
    { 
     StreamReader champFile = File.OpenText("WorldSeriesWinners.txt"); 
     List<string> inputTeams = new List<string>(); 
     string selectedTeam; 

     while (!champFile.EndOfStream) 
     { 
      inputTeams.Add(champFile.ReadLine()); 
     } 
     while (listBox1.SelectedIndex != 0) 
     { 
      selectedTeam = listBox1.SelectedItem.ToString(); 
     } 
     selectedTeam = listBox1.SelectedItem.ToString(); 
     var count = File.ReadLines("WorldSeriesWinners.txt").Count(x => x.Contains(selectedTeam)); 

     if (count > 0) 
     { 
      MessageBox.Show("The " + selectedTeam + "has won the World Series " + count + " times! "); 
     } 
     else 
     { 
      MessageBox.Show("The " + selectedTeam + "has never won the World Series."); 
     } 
    } 
} 
+0

你有沒有通過這個代碼..我很好奇什麼發生在你的第一個while循環開始''1告訴我們什麼是錯誤 – MethodMan

+0

我沒有得到任何錯誤。當我選擇列表框中的第一個項目,然後點擊按鈕顯示消息框,顯示團隊贏得世界大賽的次數,它就可以工作。如果我在列表框中選擇任何其他團隊,程序就會凍結,我不得​​不停止調試。 –

+0

看看你的代碼..對於初學者..也許你需要看看這行代碼'StreamReader champFile = File.OpenText(「WorldSeriesWinners.txt」);'第一次打開它是好的..但是當你關閉或者處理'champFIle'對象..? – MethodMan

回答

2

您的代碼永遠不會工作,除非你總是選擇在列表中的代碼,這是否

while (listBox1.SelectedIndex != 0) 
{ 
    selectedTeam = listBox1.SelectedItem.ToString(); 
} 

的第一個項目將繼續運行永遠自如果您在列表框中選擇除第一個條目之外的任何其他項目,listBox1.SelectedIndex將永遠不會爲0,並且它將永遠循環。沒有理由有一個while循環來讀取所選項目。

+0

謝謝。改變'if(listBox1.SelectedINdex!= 0)'似乎解決了這個問題。 –

0

您需要關閉流,當你用它做

private void button2_Click(object sender, EventArgs e) 
{ 
    StreamReader champFile = File.OpenText("WorldSeriesWinners.txt"); 

... 
    champFile.Close(); 
} 

最好的做法是使用using聲明

private void button2_Click(object sender, EventArgs e) 
{ 
    using(StreamReader champFile = File.OpenText("WorldSeriesWinners.txt")) 
    { 

... 
    } 
} 

您可以通過在包裝你的File.OpenText測試此一個try聲明。並打破了捕捉。

0

嘗試這樣做

using(StreamReader champFile = File.OpenText("WorldSeriesWinners.txt")){ 
... 
} 
+1

最好的做法是關閉流,但這不是bug的來源;有一個無限的循環。流是一個局部變量,它將在方法結束時超出範圍,並最終收集垃圾,這將關閉流。根據文件的打開方式,存在潛在的文件鎖定問題。就個人而言,我寧願將打開的文件視爲只讀,而不用擔心流未關閉;這將避免任何意外寫入文件損壞的機會,並解決文件鎖定問題。 –