2

简单的课程计算单词并得到上面的错误,它让我发疯。

int words; //variable to hold word count.

//WordCount methos will count the spaces and punciation.
private int WordCount(string str)
{
    int words = 0; //the number of words counted

    //count the white spaces and punctuation.
    foreach (char ch in str)
    {
        if (char.IsWhiteSpace(ch))
        {
            words++;
        }
        if (char.IsPunctuation(ch))
        {
            words++;
        }

        //return number of words
        return words;
    }
}
4

3 回答 3

8

如果字符串为空,则不会执行返回命令。

改用这个:

//WordCount methos will count the spaces and punciation.
private int WordCount(string str)
{
    int words = 0; //the number of words counted

    //count the white spaces and punctuation.
    foreach (char ch in str)
    {
        if (char.IsWhiteSpace(ch))
        {
            words++;
        }
        if (char.IsPunctuation(ch))
        {
            words++;
        }
   }

   //return number of words
   return words;
}
于 2013-11-13T19:21:16.197 回答
3

您的代码从循环内部返回foreach,如果传递的参数是null,您将得到一个异常,如果它是一个空字符串,执行将不会进入循环因此错误。

您当前的方法在逻辑上也是不正确的,因为它将在第一次迭代后返回,可能会给您不正确的结果。您的 return 语句应该在foreach循环之外

于 2013-11-13T19:23:15.990 回答
2

您的方法被声明为 int,这意味着它必须返回一个值。编译器抱怨说不能保证是这种情况。特别是如果字符串为空,则不会输入您的 foreach 并且不会执行 return 语句。

另一方面,在第一次迭代中强制返回会使 foreach 毫无意义。

于 2013-11-13T19:23:26.727 回答