条件有什么不对?

时间:2017-10-25 03:15:17

标签: c# arrays string while-loop conditional-statements

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;我不知道原因。

3 个答案:

答案 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循环的每次迭代中递增ij,但是你永远不会退出循环。

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();

        }
    }
}

场景#1 - 输入非字母字符 enter image description here

场景#2 - 输入字母字符和空格(预期结果) enter image description here