2017-10-25 3 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public const int N = 10; 
     static void Main(string[] args) 
     { 
      char[] word = Console.ReadLine().ToCharArray(); 
      int i = 0, j = 0; 
      Console.WriteLine(word); 
      while ((word[i] >= 'a' && word[i] <= 'z') || (word[i] >= 'A' && word[i] <= 'Z')) 
      { 
       j++; 
       i++; 
      } 
      Console.WriteLine(+j); 
      Console.ReadLine(); 

     } 
    } 
} 

디버깅을 시도 할 때마다 debbuger가 "IndexOutOfRangeException이 처리되지 않았습니다"라는 메시지를 표시하고 이유를 알지 못합니다.조건이있는 동안 뭐가 잘못 되었나요?

+1

당신은'word'의 길이를 확인하지 않음 정렬. 모든 글자가 글자라면, 'i'가 배열의 끝을 넘을 때까지 루프가 계속 될 것이고 예외를 얻을 것입니다. –

+0

팁 : 질문하기 전에 여전히 질문을하기로 결정한 경우 오류 메시지/예외 이름 (예 : https://www.bing.com/search?q=c%23+IndexOutOfRangeException)을 검색하십시오. [MCVE] 모든 필요한 정보를 인라인으로 최소한의 코드로 제공하는 가이드 라인 (이 경우''A ".ToCharArray() [1]'") –

답변

3

당신은 배열의 길이 확인되지 않고 지속적으로 IndexOutOfRangeException가 발생하는 이유 또한 알아야 할 IndexOutOfRangeException

이 조건을 추가하고

while (i < word.Length && (word[i] >= 'a' && word[i] <= 'z') || (word[i] >= 'A' && word[i] <= 'Z')) 
{ 
    j++; 
    i++; 
} 

를 작동의 원인 요소 확인 그리고 그것이 의미하는 것 참조 - https://msdn.microsoft.com/en-us/library/system.indexoutofrangeexception(v=vs.110).aspx

2

이것은 while 루프를 반복 할 때마다 ij을 증가시키기 때문입니다. 루프를 종료하십시오.

char[] word = Console.ReadLine().ToCharArray(); 

i 콘솔에서 읽은 라인보다 큰 값이되면 어떻게됩니까? 당신이 얻을 IndexOutOfRangeException

아마 증가 생각하면 i을 중단하고 루프 밖으로 탈출 생각하고 싶습니다.

+1

.. 질문은 숙제 냄새가 난다. 나는 그에 따라 대답했고 단지 제공하지 않았다. 솔루션,하지만 포스터가 해결하는 방법에 대해 생각하고있다. – flyte

2

위의 답변은 이미 문제에 대한 충분한 정보를 제공했습니다. 나는 결과에 덧붙일 것입니다.

알파벳 만 표시하려는 경우 입력 문자/단어가 알파벳 문자 또는 공백인지 확인한 다음 문자/단어를 표시하고 잘못된 문자 메시지를 반환하십시오.

다음은 참조 용으로 테스트를 완료 한 클래스입니다.

using System; 
using System.Text.RegularExpressions; 

namespace WhileLoop 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      string words = Console.ReadLine(); 

      //input words 
      Console.WriteLine(words); 


      //check not alphabet or space, return invalid error message 
      Regex rgx = new Regex("[^a-zA-Z ]+"); 
      if (rgx.IsMatch(words)) 
      { 
       Console.WriteLine("Please input alphabet or space only Ie. A-Z, a-z,"); 
      } 

      Console.ReadLine(); 

     } 
    } 
} 

시나리오 # 1 - 입력 비 알파벳 문자 enter image description here

시나리오 # 2 - 입력 알파벳 문자와 공간 (예상 결과) enter image description here

+0

OPs 코드 문자열의 주요 알파벳 문자의 수를 세고 있었지만, 이것 역시 흥미 롭습니다. –