1

我编写此代码是为了获取一组字符,直到读取特定字符。我知道有更好的方法,但只是出于好奇。它没有用。循环没完没了地继续。为什么是这样 ???

foreach (char myChar in monthYear)
{
    do
    {
        whichMonth = whichMonth + myChar;
    } while (myChar.ToString() == "-");
}
4

5 回答 5

7

这就是您要告诉编译器执行的操作...

foreach (char myChar in monthYear)
{

    do  // Execute this piece of code
    {
        whichMonth = whichMonth + myChar;
    } while (myChar.ToString() == "-"); // While myChar is '-'

    // Here, the foreach loop moves to the next character
}

因此,给定 string 02-2013,这是代码的执行路径。

  • foreach我的性格monthYear
    • myChar = '0'
    • do
      • whichMonth = whichMonth + '0'
      • while(myChar == '-') false,退出while循环
    • myChar = '2'
    • do
      • whichMonth = whichMonth + '2'
      • while(myChar == '-') false,退出while循环
    • myChar = '-'
    • do
      • whichMonth = whichMonth + '-'
      • while(myChar == '-') true,继续while循环
      • whichMonth = whichMonth + '-'
      • while(myChar == '-') true,继续while循环
      • whichMonth = whichMonth + '-'
      • while(myChar == '-') true,继续while循环
      • ... 无限重复 ...

由于您的 while 循环,当它碰到“-”时,它实际上永远不会转到下一个字符。相反,请使用以下break语句:

foreach (char myChar in monthYear)
{
    whichMonth = whichMonth + myChar;

    if(myChar == '-') break;
}
于 2013-02-04T18:35:16.223 回答
1

只是为了补充 Cedric 的答案,这将永远持续下去,因为您实际上从未真正更改myChardo..while 循环内部的值。相反,您要做的是在更改时退出foreach使用break关键字。myChar

另外我会做:

if(myChar == '-')
   break;

.ToString()当您可以将其与您感兴趣的字符进行比较时,调用该字符并将其转换为字符串是没有意义的。

于 2013-02-04T18:36:15.693 回答
0

在你do ... while循环中,myChar永远不会被修改。只需使用带有 a 的条件break即可退出循环。

foreach (char myChar in monthYear)
{
    whichMonth = whichMonth + myChar;

    if(myChar == '-')  // myChar.ToString() is not necessary, you can check the char directly (use '' to specify a char)
        break;
}
于 2013-02-04T18:34:38.550 回答
0

因为如果您的 myChar 等于“-”,它将始终执行

whichMonth = whichMonth + myChar;

您没有在执行期间更新 myChar

于 2013-02-04T18:35:49.617 回答
0

您正在编写一个 for each 循环,其中包含一个 while 循环。

foreach 将遍历字符串中的所有字符。

让我们假设 123-456

在第一次迭代中,您myChar的值为 1。

那么你的while循环将测试是否myChar等于“-”。但它永远不会获得新的价值。它将永远是 1。

于 2013-02-04T18:36:35.660 回答