循环通过一个数组,然后输出结果?

时间:2011-02-06 21:39:18

标签: c# loops foreach if-statement

我有一点问题,在下面的代码(C#)中循环认为是数组,然后检查user_id是否有一个大于50的user_post,然后写下user_id,预期的结果是

12
13

但实际输出是

12
12
12

代码有什么问题?我尝试了一个标准的循环,但无法正确使用它?

int[] user_id = new int[64];
int[] group_id = new int[64];
int[] user_post = new int[64];

//user 55
user_id[0] = 10;
group_id[0] = 8;
user_post[0] = 4;

//user56
user_id[1] = 11;
group_id[1] = 2;
user_post[1] = 15;

//user57
user_id[2] = 12;
group_id[2] = 2;
user_post[2] = 55;

//user58
user_id[3] = 13;
group_id[3] = 2;
user_post[3] = 56;

foreach (int i in group_id)
{
    if (group_id[i] == 2)
        if (user_post[i] > 50)
            Console.WriteLine(Convert.ToString(user_id[i]));
}

Console.WriteLine("Press any key too continue...");
Console.ReadLine();
// continue...

5 个答案:

答案 0 :(得分:1)

因为您的if语句只检查2

 if (group_id[i] == 2)

其中“i”不是计数器而是来自foreach循环的元素。 和2&第3个位置有2个组ID,所以它总是这样结束:

if (group_id[8] == 2) //false
if (group_id[2] == 2) //true
if (group_id[2] == 2) //true

而不是那些模糊的代码,你应该把你的循环作为这个:

for(int i = 0 ; i< 64 ; i++)
{
    if (group_id[i] == 2)
    {
        if (user_post[i] > 50)
        Console.WriteLine(Convert.ToString(user_id[i]));
    }

}

答案 1 :(得分:0)

foreach (int i in group_id)

错了,你必须使用:

for(int i = 0; i < group_id.Length; i++)

因为前者使用group_id中的值作为数组的索引。

顺便说一下,我建议你创建一个例如Info喜欢:

class Info
{
   public int GroupId {get; set;};
   public int UserId {get; set;};
   public int PostId {get; set;}
}

这将允许您仅创建一个数组(即Info[])并避免由于3个数组的长度不同而可能出现的错误......

答案 2 :(得分:0)

你使用for each语句循环错误的数组。您应该使用常规for语句循环,如下所示:

    for (int i = 0;i < user_post.Length; i++)
    {
        if (user_post[i] > 50 && group_id[i] == 2)
        {
          Console.WriteLine(Convert.ToString(user_id[i]));
        }
    }

答案 3 :(得分:0)

在你的foreach语句中,i接受存储在group_id数组中的值 - 8,2,2,2

if和输出语句中,您使用此值作为数组的索引

因此,您的if语句最终会这样做:

if(group_id[8])...
if(group_id[2])...
if(group_id[2])...
if(group_id[2])...

您只检查数组中的元素8和。

使用for循环遍历数组索引

答案 4 :(得分:0)

for语法如下:

for (int i = 0; // incremental variable
     i < 100;   // determining a limit
     ++i)       // increment the variable

虽然foreach的工作原理如下:

foreach (var element        // the element itself, not an index
         in
         elementCollection) // iterating through the collection