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

myCharCedricの答えに追加するだけで、 do..while ループ内の値を実際に変更することはないため、これは永遠に続きます。代わりに、変更時にキーワードforeachを使用して終了します。breakmyChar

さらに、私は次のようにします:

if(myChar == '-')
   break;

.ToString()興味のある文字と比較するだけで、文字を呼び出して文字列に変換しても意味がありません。

于 2013-02-04T18:36:15.693 に答える
0

あなたdo ... whileのループでmyCharは、変更されることはありません。breakループから抜け出すには、 a で条件を使用するだけです。

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;

do-while で myChar を更新していません

于 2013-02-04T18:35:49.617 に答える
0

内部に while ループを含む for each ループを作成しています。

foreach は、文字列内のすべての文字を反復処理します。

123-456と仮定しましょう

最初の反復でmyCharは、値は 1 になります。

while ループはmyChar、「-」に等しいかどうかをテストします。しかし、それは決して新しい価値を得ることはありません。永遠に1です。

于 2013-02-04T18:36:35.660 に答える