特定の文字が読み取られるまで一連の文字を取得するために、このコードを作成しました。もっと良い方法があることは知っていますが、単なる好奇心です。うまくいきませんでした。ループは無限に続きました。どうしてこれなの ???
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を終了しますwhilemyChar = '2'do
whichMonth = whichMonth + '2'while(myChar == '-') です、ループfalseを終了しますwhilemyChar = '-'do
whichMonth = whichMonth + '-'while(myChar == '-') です、ループtrueを続けますwhilewhichMonth = whichMonth + '-'while(myChar == '-') です、ループtrueを続けますwhilewhichMonth = whichMonth + '-'while(myChar == '-') です、ループtrueを続けますwhilewhile ループのため、「-」にヒットしたときに実際に次の文字に移動することはありません。代わりに、次のbreakステートメントを使用します。
foreach (char myChar in monthYear)
{
whichMonth = whichMonth + myChar;
if(myChar == '-') break;
}
myCharCedricの答えに追加するだけで、 do..while ループ内の値を実際に変更することはないため、これは永遠に続きます。代わりに、変更時にキーワードforeachを使用して終了します。breakmyChar
さらに、私は次のようにします:
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です。