2011-06-13 54 views
3
int LetterCount = 0; 
string strText = "Debugging"; 
string letter; 

for (int i = 0; i <strText.Length; i++) 
{ 
    letter = strText.Substring(0, 9); 
    if(letter == "g") 
    {  
    LetterCount++; 
    textBox1.Text = "g appears " + LetterCount + " times"; 
    } 
} 

所以,我正在做這個教程的東西,我一直堅持這個練習4小時。我無法弄清楚我的For Loop有什麼問題。我的C#For循環和If語句有什麼問題?

練習的要點是讓我的程序事情告訴我有多少克在調試這個詞。但你可能已經明白了。無論如何,我甚至不知道我有正確的代碼告訴我,因爲我認爲我需要更改For循環的第二部分(i <)部分。

但我的問題是,它根本沒有註冊「if letter ==」g「」。因爲根據我的本地窗口它說那個字母=調試,這會讓我覺得g應該在我的程序上註冊24次,我認爲(因爲str.length是9個字母?)但是無論我做什麼,它都註冊爲0 。

+0

順便說一句,你還應該考慮比較兩個字符串時使用string.Equals,因爲你可以設置比較是否應區分和語言敏感。 – 2011-06-13 22:01:47

+0

每次運行循環時都不需要更新該文本框。在for循環之後移動這一行。 textBox1.Text =「g出現」+ LetterCount +「times」; – 2011-06-13 22:02:45

+0

Omg。所以,教程很愚蠢。它告訴我要放0,1。 – Cole 2011-06-13 22:05:06

回答

7

您正在提取一個由9個字符組成的字符串。它永遠不會等於「g」(只有一個)。這是我該怎麼做的。

int count = 0; 
foreach (char c in strText) 
{ 
    if (c == 'g') 
     count++; 
} 

使用for循環:

for (int i = 0; i < strText.Length; i++) 
{ 
    if (strText[i] == 'g') 
     count++; 
} 
+0

@Jonathan,它的缺點是它是一個** foreach **而不是** for **循環,所以OP將無法獲得對它的「普通香草」的理解, d猜是他們正在遵循的教程的主要目的;或至少在當前部分=) – Rob 2011-06-13 22:00:57

+0

我可能會在一行中做循環只是爲了給老師留下深刻的印象:'foreach(char c in strText)if(c =='g')count ++;':o) – balexandre 2011-06-13 22:01:56

+0

@羅布:那麼,我確實指出了我腦海中似乎最主要的錯誤。如前所述,這可能就是我想要的方法。但是,是的,如果這是某種學校作業,嘿可能還不熟悉'foreach'。 – 2011-06-13 22:02:57

5

查看string.Substring(x, y)的文檔。

基本上是:

letter = strText.Substring(0, 9); 

是不是給你的信。每次通過它給你所有9個字符的字符串strText您可能需要考慮將變量i用於傳遞給Substring的其中一個值。

(我故意不給你整個答案,因爲你似乎想要了解,所以,如果我給出的指針不能讓你到達那裏,讓我知道,我會擴大我的答案=)

+0

那麼我有0,1,但那只是讓我卡在D。我認爲我正在閱讀的教程是錯誤的,因爲它告訴我把0,1。但是把我,1固定它。謝謝:D <3 – Cole 2011-06-13 22:03:44

+1

@Cole,很高興我可以幫忙=)這聽起來很像你正在通過的教程有一個錯字(或三)!哦,歡迎來到stackoverflow =) – Rob 2011-06-13 22:04:53

0

您在for循環中根本沒有使用i

你的意思

letter = strText.Substring(i, 1); 

+0

Ohhhh,是我的問題? – Cole 2011-06-13 22:00:25

+0

我很盲目。我無法分辨這是否是教程中的I或1:[ – Cole 2011-06-13 22:01:05

+0

隨着年齡的增長,會越來越多。 :) – John 2011-06-13 22:04:06

1

試試這個:

for (int i = 0; i <strText.Length; i++) 
    { 

     if(strText[i] == 'g') 
     { 
     LetterCount++; 
     } 
    } 
    textBox1.Text = "g appears " + LetterCount + " times"; 

的問題是,你正在看整個字符串時,你比較 「G」。通過指定一個索引,可以讓它查看字符串中的特定字符。此外,我刪除了你的子字符串,因爲它似乎沒有做任何事情。

+0

我認爲你的意思是'信[i] =='g'' – 2011-06-13 22:00:23

+0

不確定你的第一行是否正確,或多或少,你剛剛複製了strText的值,你是不是想用.ToCharArray()來代替? – 2011-06-13 22:01:21

+0

是的,謝謝。 – 2011-06-13 22:01:25

0

那麼,你正在考慮長9個字符串的子字符串,並將其與「g」進行比較。它不會是平等的。

你應該嘗試:

letter = strText.Substring(i,1); 
0

因爲String.Substring(int, int)有兩個參數:偏移量和量取。

就你的情況而言,letter = strText.Substring(0, 9);將簡單地將字母值賦給「調試」。如果你想單獨檢查每個字母,你需要編寫letter = strText.Substring(i, 1)

0

你可能在尋找這樣的事情:

int LetterCount = 0; 
string strText = "Debugging"; 
string letter; 

for (int i = 0; i <strText.Length; i++) 
{ 
    letter = strText.Substring(i, 1); 
    if(letter == "g") 
    {  
    LetterCount++; 
    textBox1.Text = "g appears " + LetterCount + " times"; 

    } 
} 
0

信= strText.Substring(0,9);

在這一點上,'字母'的值爲「調試」,因爲你正在接收整個字符串。

嘗試letter = strText[i]所以你隔離單個字母。

0

@Rob說了什麼。

嘗試這樣:

int gCount = 0; 
string s  = "Debugging"; 

for (int i = 0; i <strText.Length; i++) 
{ 
    if (s[i] == 'g') ++gCount ; 
} 
textBox1.Text = "g appears " + gCount+ " times"; 
0
namespace runtime 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

      int lettercount = 0; 
      string strText = "Debugging"; 
      string letter; 


      for (int i = 0; i < strText.Length; i++) 
      { 
       letter = strText.Substring(i,1); 

       if (letter == "g") 
       { 
        lettercount++; 
       } 

      } 
      textBox1.Text = "g appear " + lettercount + " times"; 
     } 
    } 
} 
+0

請用代碼添加更多的細節 – 2012-10-26 08:07:22