我想要做的是比较结构中的两个相同变量。 例如,我有一个像这样的结构:
struct player
{
public string name;
public int number;
}
static player[] players = new player[3];
我想要做的是比较数字,这样如果两个玩家的数字相同,就会发生一些事情。
这是我试过的,但总会说两个数字是相同的,因为它会比较两个相同的
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length; j++)
{
if (players[i].number == players[j].number)
{
Console.WriteLine("Same");
Console.ReadLine();
}
else
{
Console.WriteLine("Not");
Console.ReadLine();
}
}
希望你明白我的意思。 任何帮助将非常感激! 感谢
答案 0 :(得分:3)
问题在于循环变量i
和j
从索引零开始。然后,您将元素零与元素零进行比较,因此条件为真。
更新此行:
for (int j = 0; j < length; j++)
到此:
for (int j = i + 1; j < length; j++)
更准确。条件的评估结果不仅适用于第一个元素,而且适用于i
和j
相同时的每个元素。该解决方案禁止控制变量在任何迭代中具有相同的值。
答案 1 :(得分:1)
简单,只需添加一项检查以确保您没有比较相同的索引,因为这是同一个对象:
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length; j++)
{
if (i == j) continue;
if (players[i].number == players[j].number)
{
Console.WriteLine("Same");
Console.ReadLine();
}
else
{
Console.WriteLine("Not");
Console.ReadLine();
}
}
答案 2 :(得分:-2)
使用类,并使用Linq:
执行public class Player
{
public string Name { get; set; }
public int Number { get; set; }
}
然后在其他类中有这种方法来交叉检查
private void Match()
{
var players = new Player[3].ToList();
foreach (var found in players.ToList().Select(player => players.FirstOrDefault(p => p.Number == player.Number)))
{
if (found != null)
{
Console.WriteLine("Same");
Console.ReadLine();
}
else
{
Console.WriteLine("Not");
Console.ReadLine();
}
}
}