![](/img/trans.png)
[英]C# What am I doing wrong? Attempting counter up with do while loop but only iterating once
[英]What is wrong with this do…while loop C#?
我编写了这段代码,以获取一组字符,直到读取了特定字符为止。 我知道有一种更好的方法,但只是出于好奇。 没用 循环不断地继续。 为什么是这样 ???
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
}
因此,给定字符串02-2013
,这是代码的执行路径。
monthYear
foreach
字符
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;
}
只是为了增加Cedric的答案,这将一直持续下去,因为您实际上从未在do..while循环内更改myChar
的值。 相反,您要做的是在myChar
更改时使用break
关键字退出foreach
。
另外我会做:
if(myChar == '-')
break;
可以只将它与您感兴趣的char进行比较,而调用.ToString()
并将char转换为字符串则毫无意义。
在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;
}
因为如果myChar等于“-”,它将始终执行
whichMonth = whichMonth + myChar;
您不会在做时更新myChar
您正在为每个循环编写一个while循环。
foreach将遍历字符串中的所有字符。
让我们假设123-456
在第一次迭代中,您的myChar
将具有值1。
然后您的while循环将测试myChar
是否等于“-”。 但是它永远不会获得新的价值。 永远是1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.