2014-02-16 57 views
0

基本上在創建列表「rValues」之後,我使用列表查看其中是否包含任何值,is == 0。被引用的行被註釋爲「關注行」,但是當upperB被設置爲5時,該行會導致程序爲列表中的每個值寫下x的值is ==0使用特定的列表值

我的問題是,有什麼辦法可以說,對於列表中的第一個值,is == 0它記下x的值,然後程序繼續,幾乎就好像只找到列表中的單個值它被注意到列表的其餘部分被刪除?謝謝。

 List<int> rValues = new List<int>(); 

      do 
      { 
       x++; 
       v = 0; 
       rValues.Clear(); 
       do 
       { 
        v++; 
        r = x % v; 
        rValues.Add(r); 
       } while (v < x); 

       foreach (int B in rValues) 
       { 
        if (B == 0) // line of concern 
        { 
         Console.WriteLine(x); 
        } 
        else 
        { 
         continue; 
        } 
       } 

      } 
      while (x != upperB); 
      Console.ReadLine(); 

     } 
    } 
} 
+1

不確定你的意思,你是否想要刪除除0之外的所有值?如果是這樣,當你發現值== 0時,打破循環。順便說一句,那個陳述是多餘的。 –

+1

如果你在foreach循環中刪除else,那麼我肯定循環會繼續。 –

+0

當列表中的值== 0時,我想記下x的值,然後刪除包含值等於0的整個列表。但是,當前正在發生的是它爲列表中的每個值寫入值x這就是== 0.所以當v是1和x是2時,它的值是2%1,它是0,並寫入值x,但不是在那裏停止,而是再次從x = 3開始,它的值爲2%2,也是0並再次寫下2,如果這是有道理的? 還剛剛意識到v應該在1不是0開始的一切整除1等每個值將是= 0 – user3316384

回答

0

我不知道爲什麼你在代碼中寫了所有其他循環。爲了回答這個問題,那隻需要像下面那樣,並且「繼續」。不需要。

int c=0; 
foreach (int B in rValues) 
       { 
c++; 
        if (B == 0) // line of concern 
        { 
         Console.WriteLine(x); 
        } 
        else 
        { 
         //continue; 
rValues.deleteat(c); 
        } 
       } 
+0

我把它放進去,它不允許「.deleteat(c);」沒有它,問題仍然在發生。 – user3316384

+0

我試過.removeat(c);而不是.deleteat(c);問題仍然存在 – user3316384

0

嘗試使用linq而不是foreach循環。然後只需撥打rValues.Clear()

則代碼應該是這樣的:

List<int> rValues = new List<int>(); 

do 
{ 
    x++; 
    v = 0; 
    rValues.Clear(); 
    do 
    { 
     v++; 
     r = x % v; 
     rValues.Add(r); 
    } while (v < x); 

//my LINQ expression 
    Var B = rValues.FirstOrDefault((result) => result==0); 
    rValues.Clear(); 

//back to your code 
    while (x != upperB); 
    Console.ReadLine(); 

} 
0

嘗試是這樣的,打出來的循環,即RemoveAt移除()不工作的原因是,它是一個Foreach循環並且您在遍歷它時不能修改Enumerable。這是一件安全的事情。

List<int> rValues = new List<int>(); 
bool found = false; 
    do 
    { 
     x++; 
     int v = 0; 
     rValues.Clear(); 
     do 
     { 
      v++; 
      int r = x % v; 
      rValues.Add(r); 
     } while (v < x); 

     foreach (int B in rValues) 
     { 
      if (B == 0) // line of concern 
      { 
       found = true; 
       Console.WriteLine(x); 
       break; 
      } 
     } 

    } 
    while (x != upperB && !found); 

    Console.ReadLine();