我试图从数组x中找到2个或更多相同的元素然后重复添加到新数组Y
所以,如果我有x数组编号如:2,5,7,2,8我想在y数组中添加数字2
int[] x = new int[20];
Random rnd = new Random();
int[] y = new int[20];
int counter = 0;
for (int i = 0; i < x.Length; i++)
{
x[i] = rnd.Next(1, 15);
for (int j=i+1; j< x.Length; j++)
{
if (x[i] == x[j])
{
y[counter] = x[i];
Console.WriteLine("Repeated numbers are " + y[counter]);
counter++;
}
else
{
Console.WriteLine("There is no repeated numbers, numbers that are in x are " + x[i]);
}
break;
}
}
但是遇到问题,当它来到if循环时,它不想继续执行if循环(即使条件为真)
如果有人可以给我一些建议,那会有所帮助,谢谢
答案 0 :(得分:4)
您使用for
时会出现各种逻辑错误。你应该更多地研究你的逻辑,因为虽然可以通过死记硬背来学习库,但逻辑错误更多的是你内在的东西。
int[] x = new int[20];
Random rnd = new Random(5);
// You don't know the length of y!
// So you can't use arrays
List<int> y = new List<int>();
// First initialize
for (int i = 0; i < x.Length; i++)
{
x[i] = rnd.Next(1, 15);
}
// Then print the generated numbers, otherwise you won't know what numbers are there
Console.WriteLine("Numbers that are in x are: ");
for (int i = 0; i < x.Length; i++)
{
Console.WriteLine(x[i]);
}
// A blank line
Console.WriteLine();
// Then scan
for (int i = 0; i < x.Length; i++)
{
for (int j = i + 1; j < x.Length; j++)
{
if (x[i] == x[j])
{
y.Add(x[i]);
Console.WriteLine("Repeated numbers is " + x[i]);
}
}
}
// Success/failure in finding repeated numbers can be decided only at the end of the scan
if (y.Count == 0)
{
Console.WriteLine("There is no repeated numbers");
}
我在代码中添加了一些注释(加上更改)
出于调试目的,我建议您使用固定的Random
序列。每次启动程序时,new Random(5)
(或任何其他数字)都会返回相同的序列。
请注意,如果有多个重复的数字,例如{ 4, 4, 4 }
,则y数组将为{ 4, 4 }
答案 1 :(得分:2)
起初: 为什么你要使用&#39;休息;&#39; ?
第二: 在第一个for-loop中你给一个随机数指定x [i] 但随后在嵌套的第二个循环中 你已经要求x [j]检查相同的值(但还没有存在)
有很多方法可以检查数值是否相等, 但我喜欢你的方法: 所以我建议:
进行for循环并将所有随机数分配给int [] x
然后再想想你如何评价 x [0] = x [1]或x [2]或x [3] ......
答案 2 :(得分:0)
在代码中使用linq,如下所示
//first populate array x
var duplicates= xArray.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(y => y.Key)
.ToArray();
上面的linq查询使用groupby并在你的数组中找到重复的元素,然后你选择那些元素并返回结果
答案 3 :(得分:0)
int[] array = new int[5] {1,2,3,4,4};
List<int> duplitcateList = array.Where(x => array.Where(y => y == x).Count() > 1).Distinct().ToList();
或者你可以用下面的代码替换上面代码的最后一行。
List<int> duplitcateList = array.
GroupBy(x => x).Where(g => g.Count() > 1).Select(g => g.Key).ToList();
上面的代码正在使用Linq。
假设您的第一个数组(问题x
)是array
。
Linq将首先检查列表中出现多次的所有元素,然后明确选择它们并将其存储到duplicateList
如果你需要一个数组,你可以通过这样做简单地将这个列表转换为数组,
int[] yArray = duplitcateList.ToArray();
答案 4 :(得分:0)
尝试使用Linq在数组
中查找副本int[] x = new int[] { 2, 5, 7, 2, 8 };
int[] y;
var result = x.GroupBy(item => item)
.Select(grp => new { key = grp.Key, Count = grp.Count() });
y = result.Where(res => res.Count > 1).Select(res => res.key).ToArray();
答案 5 :(得分:0)
我认为如果没有复杂的扩展方法,这将是最容易理解的解决方案:
int[] x = new int[20];
// there can be at most 10 duplicates in array of length of 20 :)
// you could use List<int> to easily add elements
int[] y = new int[10];
int counter = 0;
Random rnd = new Random();
// fill the array
for (int i = 0; i < x.Length; i++)
x[i] = rnd.Next(1, 15);
// iterate through distinct elements,
// otherwise, we would add multiple times duplicates
foreach (int i in x.Distinct())
// if the count of an elements is greater than one, then we have duplicate
if(x.Count(n => n == i) > 1)
{
y[counter] = i;
counter++;
}