簡體   English   中英

C#如何確定foreach循環的最后一次迭代

[英]C# how to determine the last iteration of foreach loop

我正在嘗試建立一個計算零之間的零數目的函數。 我的函數對於以1開頭和以1結尾的二進制文件做的很好。 但是問題在於,如果給定的二進制數為100000,則返回5。但是它應該返回零,因為它不在1與2之間。

這是代碼。

private static int solution1(int N)
{
    string binary = Convert.ToString(N, 2);
    int gap = 0;
    int longestgap = 0;

    foreach (char Z in binary)
    {
        if (Z == '0') gap++;
        if (gap > longestgap) longestgap = gap;
        if (Z == '1') gap = 0;
    }
    return longestgap;
}

您需要做的就是移動第二個if 僅當您知道絕對在兩個1之間時,您才不想每次都覆蓋最長的間隔。

if (Z == '0')
{
    gap++;
}
else // if (Z == '1')
{
    if (gap > longestgap)
    {
        longestgap = gap;
    }

    gap = 0;
}

這樣,即使間隔一直持續到二進制結束,如果找不到第二個'1' ,最長的間隔仍為0。

尚未經過實際測試,但類似這樣的方法應該起作用:

bool firstOneFound = false; // To account for the case "00001"
foreach (char Z in binary)
{
    if (Z == '0')
    {
        if(firstOneFound)
            gap++;
    }
    else if (Z == '1')
    {
        if (gap > longestgap)
            longestgap = gap;

        firstOneFound = true;
        gap = 0;
    }
}

如果您不需要使用foreach循環,這似乎更干凈:

 for(int i = binary.IndexOf("1"); i < binary.Length; i++)
 {
     char Z = binary[i];
     if (Z == '0')
     {
         gap++;
     }
     else if (Z == '1')
     {
         if (gap > longestgap)
             longestgap = gap;

         gap = 0;
      }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM