2013-12-21 49 views
1

我試圖使用一個while循環來搜索一個數組,使用用戶搜索輸入,在我已經列出一個單詞電影標題到一個標準的文本文件,然後while循環不斷搜索文件,直到它找到,然後它在控制檯上輸出..但我有問題,運算符「==」不能應用於字符串變量?我將如何解決這個問題?非常感謝!聖誕快樂,這裏是我的代碼:在C#中使用while循環搜索數組?

 //Declare variables 
     int iOneWordTitle= 0; 
     string sSearch; 

     //Declare array 
     const int iFilm = 7; 
     string[] sOneWordTitle = new string[iFilm]; 

     //Add heading to console 
     Console.WriteLine("List of one word film titles"); 
     Console.WriteLine(); 

     //ask user what they want to search for 
     Console.WriteLine("What film would you like to search for?"); 
     sSearch = Console.ReadLine(); 

     //Read the film names from the datafile 
     using (StreamReader sr = new StreamReader("filmnames.txt")) 
     { 
      while (iOneWordTitle < iFilm) 
      { 
       sOneWordTitle[iOneWordTitle] = (sr.ReadLine()); 
       iOneWordTitle++; 

       if (sSearch == sOneWordTitle) 
       { 
        Console.WriteLine(sSearch + " was found at position " + iOneWordTitle); 
       } 

       else 
       { 
        Console.WriteLine("The film was not found"); 
       } 
      } 

     } 
+1

'if(sSearch == sOneWordTitle)'將字符串與字符串[]進行比較。你可能想弄清楚你真的想在那裏比較一下。 –

+0

我希望如此,如果搜索等於電影,然後輸出它在控制檯上 – Tom

+1

通過這樣做,你是比較字符串與數組對象,而不是數組中包含的字符串。 –

回答

2
  1. 而不是使用StreamReader,你可以輕鬆地閱讀中的所有行使用的文本文件File.ReadAllLines()

  2. 您還在打印電影沒有被發現 7次。如果您只想打印一次,則可以保留一個bool變量以指示找不到它。

  3. 您預先配置了文件中標題的數量爲7.如果文件中可以有更多標題,該怎麼辦?

所以,我想你可能想改變你的代碼一點點:

 int iOneWordTitle = 0; 
     string sSearch; 

     //Add heading to console 
     Console.WriteLine("List of one word film titles"); 
     Console.WriteLine(); 

     //ask user what they want to search for 
     Console.WriteLine("What film would you like to search for?"); 
     sSearch = Console.ReadLine(); 

     //Read all titles from the text file 
     string[] titles = File.ReadAllLines("filmnames.txt"); 

     //Search the array 
     bool found = false; 
     foreach (string title in titles) 
     { 
      if (title.Equals(sSearch)) 
      { 
       Console.WriteLine(sSearch + " was found"); 
       found = true; 
      } 
     } 

     //If the title wasn't found, print not found message 
     if (!found) 
      Console.WriteLine("The film was not found"); 

如果你仍然想打印位置發現,你可以在你的foreach循環轉換爲常規循環:

 for (int iOneWordTitle = 0; iOneWordTitle < titles.Count(); iOneWordTitle++) 
     { 
      if (titles[iOneWordTitle].Equals(sSearch)) 
      { 
       Console.WriteLine(sSearch + " was found at position " + iOneWordTitle); 
       found = true; 
      } 
     } 
+0

謝謝,第一種方法似乎很適合尋找電影,我有點困惑,但我怎麼實現這個for循環進入它找到列表上的電影的位置,你能提供任何進一步的幫助嗎?謝謝:) – Tom

+0

使用常規'for'循環。請參閱我的答案上的編輯... – Liel

+0

謝謝,效果很好 – Tom

2

應該

if (sSearch == sOneWordTitle[iOneWordTitle]) 

,而不是

if (sSearch == sOneWordTitle) 

在你的版本你是一個字符串數組比較字符串,而不是數組索引值。

我可能也會考慮你的變量名。

+0

'iOneWordTitle ++;'需要在比較下方移動,否則將比較下一個(到目前爲止未設置)的數組插槽。 –

+0

是的那種解決方法,但是現在只是說當我輸入正確的電影名稱時,沒有找到該電影,哪裏可能出錯?謝謝 – Tom

+1

嘗試比較字符串爲小寫字母或使用String.Equals和StringComparison.CurrentCultureIgnoreCase –

2

它必須是這樣的:

if (sSearch == sOneWordTitle[iOneWordTitle]) 

而不是做它像這樣在這裏:

if (sSearch == sOneWordTitle)