特定の文字が読み取られるまで一連の文字を取得するために、このコードを作成しました。もっと良い方法があることは知っていますが、単なる好奇心です。うまくいきませんでした。ループは無限に続きました。どうしてこれなの ???
foreach (char myChar in monthYear)
{
do
{
whichMonth = whichMonth + myChar;
} while (myChar.ToString() == "-");
}
特定の文字が読み取られるまで一連の文字を取得するために、このコードを作成しました。もっと良い方法があることは知っていますが、単なる好奇心です。うまくいきませんでした。ループは無限に続きました。どうしてこれなの ???
foreach (char myChar in monthYear)
{
do
{
whichMonth = whichMonth + myChar;
} while (myChar.ToString() == "-");
}
これがコンパイラに何をするように言っているのかです...
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;
}
myChar
Cedricの答えに追加するだけで、 do..while ループ内の値を実際に変更することはないため、これは永遠に続きます。代わりに、変更時にキーワードforeach
を使用して終了します。break
myChar
さらに、私は次のようにします:
if(myChar == '-')
break;
.ToString()
興味のある文字と比較するだけで、文字を呼び出して文字列に変換しても意味がありません。
あなた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;
}
myChar が「-」に等しい場合、常に実行されるため
whichMonth = whichMonth + myChar;
do-while で myChar を更新していません
内部に while ループを含む for each ループを作成しています。
foreach は、文字列内のすべての文字を反復処理します。
123-456と仮定しましょう
最初の反復でmyChar
は、値は 1 になります。
while ループはmyChar
、「-」に等しいかどうかをテストします。しかし、それは決して新しい価値を得ることはありません。永遠に1です。