我有一点问题,在下面的代码(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...
答案 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