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告诉我&#34; IndexOutOfRangeException未处理&#34;我不知道原因。
答案 0 :(得分:3)
您只是不检查数组的长度并不断检查导致IndexOutOfRangeException
添加此条件,它将起作用
while (i < word.Length && (word[i] >= 'a' && word[i] <= 'z') || (word[i] >= 'A' && word[i] <= 'Z'))
{
j++;
i++;
}
您还应该知道为什么会抛出IndexOutOfRangeException
以及它的含义 - https://msdn.microsoft.com/en-us/library/system.indexoutofrangeexception(v=vs.110).aspx
答案 1 :(得分:2)
这是因为你在while循环的每次迭代中递增i
和j
,但是你永远不会退出循环。
char[] word = Console.ReadLine().ToCharArray();
当i
变为大于从控制台读入的行的值时会发生什么?得到IndexOutOfRangeException
也许想想你什么时候想要停止递增i
,然后突破循环。
答案 2 :(得分: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();
}
}
}