2011-06-13 7 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 루프에 무엇이 잘못되었는지 알 수 없습니다.C# For Loop 및 If 문에 대한 잘못된 점은 무엇입니까?

연습의 요점은 디버깅에 얼마나 많은 g가 있는지 내 프로그램에 알려주는 것입니다. 하지만 아마 그걸 알았을거야. 어쨌든 For Loop (i <) 부분의 두 번째 부분을 변경해야한다고 생각하기 때문에 올바른 코드를 가지고 있는지 확신 할 수 없습니다.

그러나 문제는 "if letter =="g ""를 등록하지 않는다는 것입니다. 내 지역 창문에 따르면 글자 = 디버깅은 g가 내 프로그램에 24 번 등록해야한다고 생각하기 때문에 (str.length은 9 자 길이이므로?)하지만 내가 무엇을 하든지 0으로 등록하고 있습니다. .

+0

BTW, 당신은 또한, 두 개의 문자열을 비교할 때 string.Equals을 사용하는 것이 좋습니다. –

+0

루프를 실행할 때마다 해당 텍스트 상자를 업데이트 할 필요가 없습니다. for 반복문 뒤에이 줄을 이동하십시오. textBox1.Text = "g가 나타남"+ LetterCount + "times"; –

+0

mg. 자습서는 바보 같았습니다. 그것은 0, 1을 넣으라고했습니다. – Cole

답변

7

9 자의 문자열을 추출합니다. 그것은 결코 "g"와 동등하지 않습니다 (오직 하나만 가지고 있습니다). 나는 그것을 어떻게 할 것인가. for 루프를 사용

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

:

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

@Jonathan, 이것에 대한 단점은 ** foreach ** ** for ** loop가 아니므로, OP는 그것에 대한 "plain vanilla"에 대한 이해를 얻지 못할 것입니다. d 추측은 그들이 따르고있는 자습서의 주된 의도입니다. 또는 적어도 현재 섹션 =) – Rob

+0

선생님을 감동시키기 위해 루프를 한 줄만하면됩니다 : foreach (char c strText) if (c == 'g') count ++;': o) – balexandre

+0

@ Rob : 글쎄, 나는 내 마음에 가장 큰 실수로 보이는 것을 지적했다. 표시된대로, 그것은 아마도 내가 취하는 접근법 일 것입니다. 그러나 예, 이것이 일종의 학교 임무라면, 헤이는 아직 'foreach'에 익숙하지 않을 수도 있습니다. –

5

string.Substring(x, y)에 대한 설명서를 살펴보십시오. 기본적으로

:

letter = strText.Substring(0, 9); 

하는 당신에게 편지 쓰기를 포기하지 않을 것입니다. 매번 문자열을 통해 9 개의 문자가 모두 strText이됩니다. 하위 문자열에 전달하는 값 중 하나에 변수 i을 사용하는 것이 좋습니다.

(의도적으로 전체 답변을 제공하지는 않으므로 이해를 돕는 것처럼 보이므로 주어진 포인터를 사용하면 알려주고 답 =)

+0

글쎄, 나는 0,1을 가졌지 만, 그것은 내가 D에 머물러있게 만들었다. 나는 0, 1을 넣으라고 말했기 때문에 내가 읽고 있던 튜토리얼이 잘못되었다고 생각한다. , 1 개 고정. 고맙습니다. D <3 – Cole

+1

@Cole, 기꺼이 도와 드리겠습니다. => 작업하는 자습서가 오타 (세 개)가있는 것처럼 들립니다. 오, 오신 것을 환영합니다 stackoverflow =) – Rob

0

for 루프에서는 i을 전혀 사용하지 않습니다.

당신은

letter = strText.Substring(i, 1); 

을 의미합니까?

+0

오, 내 문제인가요? – Cole

+0

나는 꽤 장님이다. 튜토리얼에서 I 또는 1인지 알 수 없었습니다. [ – Cole

+0

나이가 들면서 점점 더 많이 발생합니다. :) – John

1

이 시도 :

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

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

문제는 당신을 "g"를 비교할 때 전체 문자열을보고있는 것입니다. 인덱스를 지정함으로써 문자열의 특정 문자를 보도록 지시합니다. 또한, 아무 것도하지 않는 것처럼 보였으므로 하위 문자열을 제거했습니다.

+0

당신은'letter [i] == 'g' '를 의미한다고 생각합니다 –

+0

첫 줄이 맞는지 확신 할 수 없지만, 더 많은 또는 덜 strText의 값을 복사했습니다. 대신 .ToCharArray()를 사용 했습니까? –

+0

예, 고맙습니다. –

0

글쎄, 당신은 긴 9 개의 charachters이고 "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

코드를 더 자세히 써주세요. –