这有什么问题......循环C#?

时间:2013-02-04 18:31:58

标签: c# while-loop char do-while

我编写了这段代码来获取一组字符,直到读取特定字符。我知道有一种更好的方式,只是好奇心。 它没用。循环持续不断。 这是为什么???

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

5 个答案:

答案 0 :(得分: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
}

因此,给定字符串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;
}

答案 1 :(得分:1)

只是为了添加Cedric的答案,这将永远持续下去,因为你实际上从未在do..while循环中更改myChar的值。相反,当您foreach更改时,您想要做的就是使用break关键字退出myChar

另外我会这样做:

if(myChar == '-')
   break;

调用.ToString()并将char转换为字符串时,没有任何意义,只需将它与您感兴趣的字符进行比较即可。

答案 2 :(得分:0)

do ... while循环中,永远不会修改myChar。只需使用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;
}

答案 3 :(得分:0)

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

whichMonth = whichMonth + myChar;

您没有在do-while

中更新myChar

答案 4 :(得分:0)

你正在为每个循环写一个while循环。

foreach将迭代字符串中的所有字符。

让我们假设123-456

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

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