我编写了这段代码来获取一组字符,直到读取特定字符。我知道有一种更好的方式,只是好奇心。 它没用。循环持续不断。 这是为什么???
foreach (char myChar in monthYear)
{
do
{
whichMonth = whichMonth + myChar;
} while (myChar.ToString() == "-");
}
答案 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。