2011-06-13 122 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